【发布时间】:2020-06-04 15:20:49
【问题描述】:
我有一个包含一个子组件的父组件,该子组件又包含一个md-dialog 组件。我用这个从组件打开对话框:
ParentComponent.vue
<template>
<div>
<ConfirmDialog
:dialogState="isDialogShown"
@closeDialog="value => isDialogShown = false"
/>
<button @click="handleOpenModal()">open modal</button>
</div>
</template>
<script>
export default {
name: 'ParentComponent',
data() {
return { isDialogShown: false }
},
methods: {
handleOpenModal() {
this.isDialogShown = true;
}
}
}
</script>
按钮单击打开此对话框:
ConfirmDialog.vue
<template>
<md-dialog :md-active.sync="localDialogState">
markup
</md-dialog>
</template>
<script>
export default {
name: "ConfirmDialog",
props: ["dialogState"],
computed: {
localDialogState: {
get() {
return this.$props.dialogState;
},
set() {
this.handleCloseDialog();
}
}
},
methods: {
handleCloseDialog() {
this.$emit("closeDialog");
}
}
};
</script>
我不太喜欢这个,因为它使用这个localDialogState 的setter 来执行这个副作用,它最终只会在设置父属性后返回到设置localDialogState,但是到目前为止我'必须使用设置器,以便我可以捕获背景点击或 ESC 按键等事件,这些事件意味着 close the modal。
注意,我不得不使用这个“本地”版本的对话框状态,因为显然 props 和 computed 道具都只保留在这个对象的实例上,所以名称会发生冲突。可能还有更好的方法可以做到这一点,我愿意听取建议,因为以上是我写过的第一行 Vue。
更新这些 (.sync'd) 道具以捕获由 md-mialog 触发的关闭事件的规范方法是什么?
【问题讨论】:
标签: javascript vue.js