详解vue父子组件关于模态框状态的绑定方案
程序员文章站
2022-04-28 17:29:21
日常开发中经常遇到的一个场景,父组件有很多操作,需要弹窗,例如:
...
日常开发中经常遇到的一个场景,父组件有很多操作,需要弹窗,例如:
<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>
如何实现子组件和父组件模态框状态的同步
方案一:使用
父组件:
<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 export default { props: { show: { type: boolean } }, computed: { dialogvisible: { get() { return this.show }, set(value) { return this.$emit('input', value) }, }, }, methods: { handleclose(val) {}, }, }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: RestTemplate详解
下一篇: RestTemplate详解