vue.js - 如何使用数据和计算属性而不是事件总线在组件之间进行通信?
问题描述
我有一个按钮和一个Overlay
组件myComponent
。openOverlay
在按钮单击时触发。通过 EventBusopenOverlay
发出。openedOverlay
<button
@click="openOverlay"
</button>
<Overlay />
methods: {
openOverlay() {
EventBus.$emit("openedOverlay");
},
},
Overlay
组件openedOverlay
通过 EventBus 监听。openedOverlay
更改overlayOpen
为 true 并显示 Modal 组件。
<Modal
v-if="overlayOpen"
:overlayOpen="overlayOpen"
/>
data() {
return {
overlayOpen: false,
};
},
mounted() {
EventBus.$on("openedOverlay", () => {
this.openMyOverlay();
});
},
methods: {
openMyOverlay() {
this.overlayOpen = true;
},
},
如何使用数据和计算属性而不是事件总线在组件之间进行通信?
解决方案
组件之间有多种通信方式。您可以使用 vuex 并放入全局存储标志以进行覆盖打开。然后,您将能够从 vue 组件层次结构中的任何位置控制它。你也可以使用 RxJs(哦,我喜欢这个库,但你应该以一种聪明的方式使用它来防止内存泄漏)。在那里,您可以创建一个主题,在您的叠加层中订阅它,并将其作为道具传递给孩子。然后这些孩子可以产生下一个价值。如果您坚持需要使用数据和计算这些决定比您要执行的方法更灵活:要执行它,您应该简单地将一些标志作为道具传递给 Overlay 组件,该标志表示打开模式的必要性。
<button
@click="openOverlay = true"
</button>
<Overlay v-model="openOverlay"/>
data() {
return {openOverlay: false}
},
和下一个片段:
<Modal
v-if="value"
:overlayOpen="value"
/>
<button @click="$emit('change', false)">close overlay</button>
data() {
props: [
value // here your v-model :)
];
},
推荐阅读
- c# - 使用 Like 搜索数据库中的数据,可能具有不同的列值
- python - 无法使用 docker 设置 Kafka 和 Python
- node.js - 为什么我收到“发送到客户端后无法设置标题”错误,即使我在 1 个响应后使用了 return
- android - 颤动如何支持类似于android sdp的多种屏幕尺寸
- r - 如何从 selectInput() 函数中获取 2 个特定列的值作为列的标题并绘制这些列?
- macos - Jenkins-无法执行shell命令
- wcf - 无法使用服务引用调用 WCF 服务操作
- unity3d - 将实时摄像机源导入统一
- python - 如果余数不为 0,则删除行
- c# - 搜索文本格式,First Upper,Rest Lower