详解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 比较时间大小的代码
Apr 24 Javascript
js中同步与异步处理的方法和区别总结
Dec 25 Javascript
浅析jquery某一元素重复绑定的问题
Jan 03 Javascript
初步认识JavaScript函数库jQuery
Jun 18 Javascript
angular.js分页代码的实例
Jul 27 Javascript
jQuery树控件zTree使用方法详解(一)
Feb 28 Javascript
jQuery实现一个简单的验证码功能
Jun 26 jQuery
Js面试算法详解
Apr 08 Javascript
详解JavaScript函数callee、call、apply的区别
Mar 08 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
Jul 22 Javascript
微信小程序 子级页面返回父级并把子级参数带回父级实现方法
Aug 22 Javascript
JS判断浏览器类型与操作系统的方法分析
Apr 30 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仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
php 截取中英文混合字符串的方法
2018/05/31 PHP
jquery cookie插件代码类
2009/05/26 Javascript
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
JSON格式的键盘编码对照表
2015/01/29 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
2015/09/14 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
electron 安装,调试,打包的具体使用
2019/11/06 Javascript
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
2019/12/21 Javascript
JavaScript实现左右滚动电影画布
2020/02/06 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
2020/02/09 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
[01:00:59]VP VS VG Supermajor小组赛胜者组第二轮 BO3第二场 6.2
2018/06/03 DOTA
python批量提交沙箱问题实例
2014/10/08 Python
python实现Floyd算法
2018/01/03 Python
python查询mysql,返回json的实例
2018/03/26 Python
解读python logging模块的使用方法
2018/04/17 Python
使用Python开发SQLite代理服务器的方法
2018/12/07 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
python向图片里添加文字
2019/11/26 Python
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
客服实习的个人自我鉴定
2013/10/20 职场文书
外企求职信范文分享
2013/12/31 职场文书
九月份红领巾广播稿
2014/01/22 职场文书
Python  lambda匿名函数和三元运算符
2022/04/19 Python