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 相关文章推荐
一页面多XMLHttpRequest对象
Jan 22 Javascript
javascript入门·动态的时钟,显示完整的一些方法,新年倒计时
Oct 01 Javascript
判断JavaScript对象是否可用的最正确方法分析
Oct 03 Javascript
学习ExtJS Window常用方法
Oct 07 Javascript
js遍历、动态的添加数据的小例子
Jun 22 Javascript
通过隐藏iframe实现无刷新上传文件操作
Mar 16 Javascript
理解javascript对象继承
Apr 17 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
Aug 09 Javascript
sea.js常用的api简易文档
Nov 15 Javascript
浅谈Vue-cli单文件组件引入less,sass,css样式的不同方法
Mar 13 Javascript
html-webpack-plugin修改页面的title的方法
Jun 18 Javascript
jQuery中getJSON跨域原理的深入讲解
Sep 02 jQuery
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
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
php递归调用删除数组空值元素的方法
2015/04/28 PHP
php批量删除操作(数据访问)
2017/05/23 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
jQuery中校验时间格式的正则表达式小结
2013/09/22 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
jQuery插件HighCharts绘制2D金字塔图效果示例【附demo源码下载】
2017/03/09 Javascript
node.js中debug模块的简单介绍与使用
2017/04/25 Javascript
vue如何获取点击事件源的方法
2017/08/10 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
2017/09/28 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
[52:02]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第一场 11.27
2020/11/30 DOTA
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
2018/03/19 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
Python骚操作之动态定义函数
2019/03/26 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
html5实现九宫格抽奖可固定抽中某项奖品
2020/06/15 HTML / CSS
Kivari官网:在线购买波西米亚服装
2018/10/29 全球购物
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
医学专业大学生求职的自我评价
2013/11/27 职场文书
致裁判员加油稿
2014/02/08 职场文书
综合实践活动总结
2014/05/05 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
党委领导班子整改方案
2014/09/30 职场文书
学者《孟子》名人名言
2019/08/09 职场文书
Pytest中skip和skipif的具体使用方法
2021/06/30 Python
Python中三种花式打印的示例详解
2022/03/19 Python