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 相关文章推荐
Javascript 模式实例 观察者模式
Oct 24 Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
Apr 12 Javascript
js取整数、取余数的方法
May 11 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
Sep 28 Javascript
JS组件系列之Bootstrap Icon图标选择组件
Jan 28 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
May 27 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
Jun 28 jQuery
浅析Vue自定义组件的v-model
Nov 26 Javascript
layui弹出层按钮提交iframe表单的方法
Aug 20 Javascript
3分钟了解vue数据劫持的原理实现
May 01 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
Jul 04 Javascript
详解vue中在父组件点击按钮触发子组件的事件
Nov 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发电子邮件
2006/10/09 PHP
PHP 字符串操作入门教程
2006/12/06 PHP
PHP实现多条件查询实例代码
2010/07/17 PHP
PHP对字符串的递增运算分析
2010/08/08 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
php检测网页是否被百度收录的函数代码
2013/10/09 PHP
php下获取http状态的实现代码
2014/05/09 PHP
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
Yii框架组件和事件行为管理详解
2016/05/20 PHP
PHP实现文件上传功能实例代码
2017/05/18 PHP
实例介绍PHP中zip_open()函数用法
2019/02/15 PHP
javascript读取xml
2006/11/04 Javascript
JavaScript中null与undefined分析
2009/07/25 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
拉动滚动条加载数据的jquery代码
2012/05/03 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
解决bootstrap模态框数据缓存的问题方法
2018/08/10 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
深入学习js函数的隐式参数 arguments 和 this
2019/06/24 Javascript
jquery多级树形下拉菜单的实例代码
2019/07/09 jQuery
一步步解析Python斗牛游戏的概率
2016/02/12 Python
插入排序_Python与PHP的实现版(推荐)
2017/05/11 Python
python用requests实现http请求代码实例
2019/10/31 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
Python网页解析器使用实例详解
2020/05/30 Python
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
干部现实表现材料
2014/02/13 职场文书
销售人员职业生涯规划范文
2014/03/01 职场文书
大学生学习2014全国两会心得体会
2014/03/13 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
晚会闭幕词
2015/01/28 职场文书
毛主席纪念堂观后感
2015/06/17 职场文书