详解vue父子组件关于模态框状态的绑定方案


Posted in Javascript onJune 05, 2019

日常开发中经常遇到的一个场景,父组件有很多操作,需要弹窗,例如:

<template>
  <div class="page-xxx">
    //点击打开新增弹窗
    <button>新增</button>
    //点击打开编辑弹窗
    <button>编辑</button>
    //点击打开详情弹窗
    <button>详情</button>
    <Add :showAdd="false"></Add>
    <Edit :showEdit="false"></Edit>
    <Detail :showDetail="false"></Detail>
  </div>
</template>

子组件:

<div class="page-add">
  <el-dialog :visible="dialogVisible" @close="handleClose"></el-dialog>
</div>
<script>
export default {
  data() {
    return {
      dialogVisible: false,
    }
  },
  methods: {
    handleClose(val) {
      this.dialogVisible= false
    },
  },
}
</script>

如何实现子组件和父组件模态框状态的同步

方案一:使用.sync 修饰符

父组件:

<template>
  <div class="page-xxx">
    //点击打开新增弹窗
    <button @click="show = true">新增</button>
    <Add :show.sync="show"></Add>
  </div>
</template>

子组件:

<div class="page-add">
  <el-dialog:visible="dialogVisible" @close="handleClose"></el-dialog>
</div>
<script>
export default {
  props: {
    show: {
      type: Boolean
    }
  },
  watch: {
    show(value) {
      this.dialogVisible= value
    }
  },
  data() {
    return {
      dialogVisible: false,
    }
  },
  methods: {
    handleClose(val) {
      this.$emit('update:show', false);
    },
  },
}
</script>

方案二:使用v-model

父组件:

<template>
  <div class="page-xxx">
    //点击打开新增弹窗
    <button @click="show = true">新增</button>
    <Add v-model="show"></Add>
  </div>
</template>

子组件:

<div class="page-add">
  <el-dialog :visible="dialogVisible" @close="handleClose"></el-dialog>
</div>
<script>
export default {
  props: {
    show: {
      type: Boolean
    }
  },
  watch: {
    show(value) {
      this.dialogVisible= value
    }
  },
  data() {
    return {
      dialogVisible: false,
    }
  },
  methods: {
    handleClose(val) {
      this.$emit('input', false)
    },
  },
}
</script>

computed OR watch ?

对于上面的两种方案,子组件内部还可以使用计算属性的写法

computed
export default {
  props: {
    show: {
      type: Boolean
    }
  },
  computed: {
    dialogVisible: {
      get() {
        return this.show
      },
      set(value) {
        return this.$emit('input', value)
      },
    },
  },
  methods: {
    handleClose(val) {},
  },
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
[原创]图片分页查看
Aug 28 Javascript
一些经常会用到的Javascript检测函数
May 31 Javascript
jQuery.query.js 取参数的两点问题分析
Aug 06 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
Sep 02 Javascript
JavaScript实现数字数组按照倒序排列的方法
Apr 06 Javascript
JQuery简单实现锚点链接的平滑滚动
May 03 Javascript
分享JS数组求和与求最大值的方法
Aug 11 Javascript
js实现HashTable(哈希表)的实例分析
Nov 21 Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
May 20 Javascript
20个必会的JavaScript面试题(小结)
Jul 02 Javascript
layui使用表格渲染获取行数据的例子
Sep 13 Javascript
AngularJS实现多级下拉框
Mar 25 Javascript
JS中实现浅拷贝和深拷贝的代码详解
Jun 05 #Javascript
优雅的处理vue项目异常实战记录
Jun 05 #Javascript
原生JS使用Canvas实现拖拽式绘图功能
Jun 05 #Javascript
Node.js 路由的实现方法
Jun 05 #Javascript
JS实现动态添加外部js、css到head标签的方法
Jun 05 #Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
Jun 05 #Javascript
jQuery操作cookie的示例代码
Jun 05 #jQuery
You might like
《PHP边学边教》(01.开篇――准备工作)
2006/12/13 PHP
探讨file_get_contents与curl效率及稳定性的分析
2013/06/06 PHP
ThinkPHP中html:list标签用法分析
2016/01/09 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
jQuery对象和DOM对象的相互转化实现代码
2010/03/02 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
web性能优化之javascript性能调优
2012/12/28 Javascript
更快的异步执行(setTimeout多浏览器)
2014/08/12 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
详解关于vue-area-linkage走过的坑
2018/06/27 Javascript
十条建议帮你提高Python编程效率
2016/02/16 Python
Python如何判断数独是否合法
2016/09/08 Python
Python中的sort()方法使用基础教程
2017/01/08 Python
Python编程实现的图片识别功能示例
2017/08/03 Python
python嵌套字典比较值与取值的实现示例
2017/11/03 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
Python的垃圾回收机制详解
2019/08/28 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
python实现电子词典
2020/03/03 Python
python爬虫学习笔记之pyquery模块基本用法详解
2020/04/09 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
CSS3 特效范例整理
2011/08/22 HTML / CSS
关于css兼容性问题及一些常见问题汇总
2016/05/03 HTML / CSS
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
经济担保书范文
2014/04/02 职场文书
导游欢迎词范文
2015/01/23 职场文书
毕业论文致谢范文
2015/05/14 职场文书
2016年优秀共青团员事迹材料
2016/02/25 职场文书