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对象弹出一个层
Mar 26 Javascript
基于jquery的超简单上下翻
Apr 20 Javascript
js中一个函数获取另一个函数返回值问题探讨
Nov 21 Javascript
js实现iframe自动自适应高度的方法
Feb 17 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
Jun 16 Javascript
JS作为值的函数用法示例
Jun 20 Javascript
Bootstrap table简单使用总结
Feb 15 Javascript
jQuery选择器之属性筛选选择器用法详解
Sep 19 jQuery
详解webpack-dev-server使用http-proxy解决跨域问题
Jan 13 Javascript
Vue.js点击切换按钮改变内容的实例讲解
Aug 22 Javascript
浅谈关于iview表单验证的问题
Sep 29 Javascript
mui js控制开关状态、修改switch开关的值方法
Sep 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 面向对象实现代码
2009/11/11 PHP
php图片添加水印例子
2016/07/20 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
js继承 Base类的源码解析
2008/12/30 Javascript
extjs fckeditor集成代码
2009/05/10 Javascript
javascript中使用css需要注意的地方小结
2010/09/01 Javascript
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
2010/11/11 Javascript
js实现拖拽 闭包函数详细介绍
2012/11/25 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
jquery获取下拉框中的循环值
2017/02/08 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
python采用django框架实现支付宝即时到帐接口
2016/05/17 Python
手把手教你python实现SVM算法
2017/12/27 Python
详解python和matlab的优势与区别
2019/06/28 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
HTML5新增加标签和功能概述
2016/09/05 HTML / CSS
罗马尼亚在线杂货店:Pilulka.ro
2019/09/28 全球购物
体育教师自我鉴定
2014/02/12 职场文书
安全资料员岗位职责范本
2014/06/28 职场文书
工程承包协议书
2014/10/20 职场文书
工地食品安全责任书
2015/05/09 职场文书
保留意见审计报告
2015/06/05 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技
TS 类型兼容教程示例详解
2022/09/23 Javascript