vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)


Posted in Javascript onFebruary 01, 2020

最近开始在用elementUI做一个后台管理系统项目,遇到一个问题,需求是这样,在父组件有一个按钮,点击按钮会显示弹窗(子组件),在子组件中用的是elementUI 的el-diolog弹窗组件,在关闭弹窗时(elementUI自带事件)便会报错。话不多说直接上代码。

DEMO

这是父组件的代码:

<template>
  <div>
     <app-refund :dialogVisible="refundVisible"></app-refund>
    // 下面是一个按钮,点击此按钮会触发refundFunc,并显示弹窗
     <el-dropdown-item @click.native="refundFunc">点击此按钮显示弹窗</el-dropdown-item>
  </div>
</template>
<script>
import refund from '@/pages/customer/refund'
export default {
  components: {
     "app-refund":refund
  },
  data(){
    return {
      refundVisible:false
    }
  },
   methods: {
   refundFunc:function(){
    this.refundVisible=true
    }
    }
}
</script>

以下是子组件的代码,为了使代码看起来更方便简洁,已经把其他冗余的代码删除,只留下能实现功能的必要代码

<template>
 <div>
 <el-dialog
   title="退余额"
  :visible.sync="dialogVisible"
  width="630px">
  </el-dialog>
 </div>
</template>
<script>
   export default { 
     props:{
     dialogVisible: {
      type:Boolean,
      default: false,
     }
    },
  }
</script>

以上便是父组件控制子组件的显示,而在子组件关闭弹窗的例子,这样肯定是不行的,因为在vue中props数据是单向流,不能在子组件改变父组件传过来的prop值,而解决方式就是用emit来更新prop值,解决方案如下。

父组件代码,js部分和上面一模一样,这里就不重复写了:

<template>
  <div>
     <app-refund :dialogVisible.sync="refundVisible"></app-refund>
    // 下面是一个按钮,点击此按钮会触发refundFunc,并显示弹窗
     <el-dropdown-item @click.native="refundFunc">点击此按钮显示弹窗</el-dropdown-item>
  </div>
</template>

子组件代码:

<template>
 <div>
 <el-dialog
   title="退余额"
  :visible.sync="dialogVisible"
  :before-close="hidePanel"
  width="630px">
  </el-dialog>
 </div>
</template>
<script>
   export default { 
     props:{
     dialogVisible: {
      type:Boolean,
      default: false,
     }
    },
      methods: { 
     // 利用sync进行数据双向绑定,子组件修改dialogVisible的值,并响应到父组件
     hidePanel() {
       this.$emit('update:dialogVisible', false)
     }
    },
  }
</script>

这里用到了elementUI的before-close方法,是弹窗关闭前的回调,用在这里的意思是在element自带的关闭弹窗方法之前调用hidePanel方法,由我们来控制弹窗的关闭,这样就能在关闭时更新dialogVisible的值,解决报错。

原理

很多时候我们需要在子组件中修改prop的值,这样就破坏了vue的单项数据流,利用vue2.3的sync可以实现数据的双向绑定,这是官方解释 https://cn.vuejs.org/v2/guide... ,使用方式也很简单。

总结

以上所述是小编给大家介绍的vue子组件改变父组件传递的prop值通过sync实现数据双向绑定,希望对大家有所帮助!

Javascript 相关文章推荐
告诉大家什么是JSON
Jun 10 Javascript
JS写的数字拼图小游戏代码[学习参考]
Oct 29 Javascript
input按钮的事件处理大全
Dec 10 Javascript
jQuery 获取URL的GET参数值的小例子
Apr 18 Javascript
简单的js表单验证函数
Oct 28 Javascript
jsonp原理及使用
Oct 28 Javascript
js 左右悬浮对联广告代码示例
Dec 12 Javascript
js获取会话框prompt的返回值的方法
Jan 10 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
Dec 07 Javascript
利用JS hash制作单页Web应用的方法详解
Oct 10 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
May 04 Javascript
Node.js API详解之 module模块用法实例分析
May 13 Javascript
Jquery Datatables的使用详解
Jan 30 #jQuery
jQuery Datatables 动态列+跨列合并实现代码
Jan 30 #jQuery
js页面加载后执行的几种方式小结
Jan 30 #Javascript
javascript设计模式之装饰者模式
Jan 30 #Javascript
原生js+ajax分页组件
Jan 30 #Javascript
javascript设计模式之迭代器模式
Jan 30 #Javascript
通过Kettle自定义jar包供javascript使用
Jan 29 #Javascript
You might like
php流量统计功能的实现代码
2012/09/29 PHP
php+ajax实时刷新简单实例
2015/02/25 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
jQuery实现首页顶部可伸缩广告特效代码
2015/04/15 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
Jquery表单验证失败后不提交的解决方法
2016/10/18 Javascript
JS中Array数组学习总结
2017/01/18 Javascript
Node.js中.pfx后缀文件的处理方法
2017/03/10 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
js 判断当前时间是否处于某个一个时间段内
2019/09/19 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
Python新手实现2048小游戏
2015/03/31 Python
Python XML转Json之XML2Dict的使用方法
2019/01/15 Python
Django 开发调试工具 Django-debug-toolbar使用详解
2019/07/23 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
Python word文本自动化操作实现方法解析
2020/11/05 Python
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
美国家具网站:Cymax
2016/09/17 全球购物
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
大学生标准推荐信范文
2013/11/25 职场文书
关于毕业的中学校园广播稿
2014/01/26 职场文书
Golang: 内建容器的用法
2021/05/05 Golang
基于PyTorch实现一个简单的CNN图像分类器
2021/05/29 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python