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 相关文章推荐
身份证号码前六位所代表的省,市,区, 以及地区编码下载
Apr 12 Javascript
一步一步制作jquery插件Tabs实现过程
Jul 06 Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
Apr 12 Javascript
JavaScript函数使用的基本教程
Jun 04 Javascript
浅析jquery unbind()方法移除元素绑定的事件
May 24 Javascript
js获取浏览器和屏幕的各种宽度高度
Feb 22 Javascript
ie下js不执行的几种可能
Feb 28 Javascript
基于Node.js的WebSocket通信实现
Mar 11 Javascript
深入理解Angular.JS中的Scope继承
Jun 04 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
May 29 jQuery
Vue Object.defineProperty及ProxyVue实现双向数据绑定
Sep 02 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
Dec 03 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获取服务器信息的实现代码
2013/02/04 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
jQuery 可以拖动的div实现代码 脚本之家修正版
2009/06/26 Javascript
javascript简单实现命名空间效果
2014/03/06 Javascript
JavaScript实现列表分页功能特效
2015/05/15 Javascript
jquery淡入淡出效果简单实例
2016/01/14 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
如何利用JQuery实现从底部回到顶部的功能
2016/12/27 Javascript
JavaScript框架Angular和React深度对比
2017/11/20 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
详解微信小程序图片地扯转base64解决方案
2019/08/18 Javascript
vue 使用localstorage实现面包屑的操作
2020/11/16 Javascript
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
利用PyInstaller将python程序.py转为.exe的方法详解
2017/05/03 Python
Python操作csv文件实例详解
2017/07/31 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
2017/11/11 Python
python PyTorch参数初始化和Finetune
2018/02/11 Python
python邮件发送smtplib使用详解
2020/06/16 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
2019/11/25 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
兰兰过桥教学反思
2014/02/08 职场文书
公安机关纪律作风整顿个人剖析材料材料
2014/10/10 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
小学四年级学生评语
2014/12/26 职场文书
2015年农村党员公开承诺事项
2015/04/28 职场文书
龙猫观后感
2015/06/09 职场文书
关于HTML编码导致的乱码问题
2021/09/04 HTML / CSS
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL