详解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 相关文章推荐
extjs 学习笔记(一) 一些基础知识
Oct 13 Javascript
php gethostbyname获取域名ip地址函数详解
Jan 24 Javascript
JavaScript 弹出窗体点击按钮返回选择数据的实现
Apr 01 Javascript
javascript实现带下拉子菜单的导航菜单效果
May 14 Javascript
JavaScript编程的单例设计模讲解
Nov 10 Javascript
使用bat打开多个cmd窗口执行gulp、node
Feb 17 Javascript
前端自动化开发之Node.js的环境搭建教程
Apr 01 Javascript
详谈js对url进行编码和解码(三种方式的区别)
Aug 16 Javascript
vue2.0 computed 计算list循环后累加值的实例
Mar 07 Javascript
React 使用Hooks简化受控组件的状态绑定
Mar 18 Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
May 12 jQuery
p5.js临摹动态图形实现方法详解
Oct 23 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分页显示制作详细讲解
2006/12/05 PHP
PHP基础之运算符的使用方法
2013/04/28 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
2014/11/24 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
jQuery验证插件 Validate详解
2014/11/20 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
2018/05/11 Javascript
jQuery 点击获取验证码按钮及倒计时功能
2018/09/20 jQuery
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
Jquery的Ajax技术使用方法
2019/01/21 jQuery
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
在Django框架中编写Contact表单的教程
2015/07/17 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
Python实现Selenium自动化Page模式
2019/07/14 Python
从0到1使用python开发一个半自动答题小程序的实现
2020/05/12 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
vue路由实现登录拦截
2021/03/24 Vue.js
会议邀请书范文
2014/02/02 职场文书
揭牌仪式策划方案
2014/05/28 职场文书
Django实现聊天机器人
2021/05/31 Python