详解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 相关文章推荐
JavaScript 浏览器验证代码(来自discuz)
Jul 17 Javascript
jQuery代码优化 遍历篇
Nov 01 Javascript
jquery 操作DOM案例代码分享
Apr 05 Javascript
每天一篇javascript学习小结(Function对象)
Nov 16 Javascript
原生js实现移动端瀑布流式代码示例
Dec 18 Javascript
JavaScript实现图片自动加载的瀑布流效果
Apr 11 Javascript
Svg.js实例教程及使用手册详解(一)
May 16 Javascript
微信小程序 教程之事件
Oct 18 Javascript
react.js 翻页插件实例代码
Jan 19 Javascript
Vue和Bootstrap的整合思路详解
Jun 30 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
Nov 11 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
Feb 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后台如何避免用户直接进入方法实例
2013/10/15 PHP
php获取汉字首字母的函数
2013/11/07 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
2014/09/04 PHP
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
Jquery乱码的一次解决过程 图解教程
2010/02/20 Javascript
一个简单的Ext.XTemplate的实例代码
2012/03/18 Javascript
JavaScript实现表格点击排序的方法
2015/05/11 Javascript
JQuery中层次选择器用法实例详解
2015/05/18 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
2015/09/06 Javascript
简单介绍JavaScript数据类型之隐式类型转换
2015/12/28 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
在vue中获取dom元素内容的方法
2017/07/10 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
Node.js中的cluster模块深入解读
2018/06/11 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
[51:39]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第二场 2月7日
2021/03/11 DOTA
Python中http请求方法库汇总
2016/01/06 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
Python中Unittest框架的具体使用
2019/08/27 Python
python实现大量图片重命名
2020/03/23 Python
Python实现结构体代码实例
2020/02/10 Python
Django REST framwork的权限验证实例
2020/04/02 Python
Python 如何定义匿名或内联函数
2020/08/01 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
上课玩手机检讨书
2014/02/08 职场文书
物流管理专业毕业生自荐信
2014/03/04 职场文书
死亡证明书样本说明
2014/10/18 职场文书
我们的节日端午节活动总结
2015/02/11 职场文书
庆元旦主持词
2015/07/06 职场文书
承诺书的内容有哪些,怎么写?
2019/06/21 职场文书