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开发包大全整理
Dec 22 Javascript
Extjs4 Treegrid 使用心得分享(经验篇)
Jul 01 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
Oct 21 Javascript
JS图片压缩(pc端和移动端都适用)
Jan 12 Javascript
原生JS实现图片网格式渐显、渐隐效果
Jun 05 Javascript
在nginx上部署vue项目(history模式)的方法
Dec 28 Javascript
浅谈node中的cluster集群
Jun 02 Javascript
jQuery实现的滑块滑动导航效果示例
Jun 04 jQuery
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
Oct 23 Javascript
一篇文章,教你学会Vue CLI 插件开发
Apr 17 Javascript
node实现socket链接与GPRS进行通信的方法
May 20 Javascript
Vue实现返回顶部按钮实例代码
Oct 21 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
图形数字验证代码
2006/10/09 PHP
定制404错误页面,并发信给管理员的程序
2006/10/09 PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
10个实用的PHP代码片段
2011/09/02 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
用一段js程序来实现动画功能
2007/03/06 Javascript
js form action动态修改方法
2008/11/04 Javascript
js的.innerHTML = &quot;&quot;IE9下显示有错误的解决方法
2013/09/16 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
详解网站中图片日常使用以及优化手法
2017/01/09 Javascript
JS中精巧的自动柯里化实现方法
2017/12/12 Javascript
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
2019/09/06 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
JavaScript实现拖动对话框效果的实现代码
2020/10/12 Javascript
老生常谈python函数参数的区别(必看篇)
2017/05/29 Python
Python Series从0开始索引的方法
2018/11/06 Python
Python使用folium excel绘制point
2019/01/03 Python
详解Scrapy Redis入门实战
2020/11/18 Python
Radley英国官网:英国莱德利小狗包
2019/03/21 全球购物
Goodee官方商店:迷你投影仪
2021/03/15 全球购物
JRE、JDK、JVM之间的关系怎样
2012/05/16 面试题
七年级地理教学反思
2014/01/26 职场文书
《油菜花开了》教学反思
2014/02/22 职场文书
《开国大典》教学反思
2014/04/19 职场文书
中国梦演讲稿教师篇
2014/04/23 职场文书
九一八事变演讲稿范文
2014/09/14 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
Redis特殊数据类型Geospatial地理空间
2022/06/01 Redis