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 相关文章推荐
js 图片轮播(5张图片)
Dec 30 Javascript
js获取单选框或复选框值及操作
Dec 18 Javascript
不同Jquery版本引发的问题解决
Oct 14 Javascript
jquery实现鼠标滑过小图时显示大图的方法
Jan 14 Javascript
BootStrap3学习笔记(一)之网格系统
May 20 Javascript
javascript 定时器工作原理分析
Dec 03 Javascript
javascript实现二叉树的代码
Jun 08 Javascript
基于jquery.page.js实现分页效果
Jan 01 jQuery
详解在React.js中使用PureComponent的重要性和使用方式
Jul 10 Javascript
Ajax实现局部刷新的方法实例
Mar 31 Javascript
小程序实现文字循环滚动动画
Jun 14 Javascript
一篇文章了解正则表达式的替换技巧
Feb 24 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网站在线人数统计
2008/04/09 PHP
php木马webshell扫描器代码
2012/01/25 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
2017/08/25 PHP
YII2框架中behavior行为的理解与使用方法示例
2020/03/13 PHP
从javascript语言本身谈项目实战
2006/12/27 Javascript
js DataSet数据源处理代码
2010/03/29 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
2014/01/11 Javascript
nodejs开发微博实例
2015/03/25 NodeJs
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
JavaScript实现自动消除按钮功能的方法
2015/08/05 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
2016/03/16 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
layuiAdmin循环遍历展示商品图片列表的方法
2019/09/16 Javascript
微信小程序tabBar设置实例解析
2019/11/14 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
在vue项目实现一个ctrl+f的搜索功能
2020/02/28 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
python多线程http下载实现示例
2013/12/30 Python
Python sys.argv用法实例
2015/05/28 Python
python实现八大排序算法(2)
2017/09/14 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
Python实现分段线性插值
2018/12/17 Python
python中partial()基础用法说明
2018/12/30 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
python实现简单坦克大战
2020/03/27 Python
解决Django no such table: django_session的问题
2020/04/07 Python
django 获取字段最大值,最新的记录操作
2020/08/09 Python
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
《晏子使楚》教学反思
2014/02/08 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
会议欢迎词范文
2015/01/27 职场文书
2015最新学生自我评价范文
2015/03/03 职场文书
蜗居观后感
2015/06/11 职场文书
MySQL的安装与配置详细教程
2021/06/26 MySQL