我将模式弹出组件myPopup.vue
用于全局。
并将其导入App.vue
和main.js
中
我将此用于全局,定义一些对象 Vue.prototype
在 Vue.prototype 中制作弹出方法 例如“显示”或“隐藏”等等。
但是我认为这可能是反模式。 我想找到更多最佳实践。
在App.vue中
<div id="app>
<my-popup-component></my-popup-conponent>
<content></content>
</div>
main.js
...
Vue.prototype.$bus = new Vue(); // global event bus
Vue.prototype.$popup = {
show(params) {
Vue.prototype.$bus.$emit('showPopup', params);
},
hide() {
Vue.prototype.$bus.$emit('hidePopup');
}
}
Vue.component('my-popup-component', { ... });
...
myPopup.vue
....
export default {
...
created() {
this.$bus.$on('showPopup', this.myShow);
this.$bus.$on('hidePopup', this.myHide);
}
...
need-popup-component.vue
methods: {
showPopup() {
this.$popup.show({
title: 'title',
content: 'content',
callback: this.okcallback
});
}
}
这似乎运作良好,但我不知道这是正确的。 还有其他办法吗?
答案 0 :(得分:1)
在阅读您的解决方案时,我感到非常惊讶,但是,如果您觉得它简单而有效,为什么不呢?
我会这样做:
这将遵循vue模式。任何处于状态的ui组件都会反映状态,而突变会改变状态。
您的解决方案可以,但是它并不遵循vue框架,因为在您的情况下,例如vue调试工具将毫无用处。我认为最好在一个应用程序中使用最少数量的模式,以进行维护,分配给其他人,等等。
答案 1 :(得分:0)
您以某种方式尝试创建全局组件,您可能希望在不同的项目中使用它。
这就是我认为我会这样做的方式-
如何重用模式对话框,而不是创建3个单独的对话框
制作一个单独的modal
组件,比方说-commonModal.vue
。
现在在您的commonModal.vue
中,接受单个prop
,再说data: {}
。
现在在html
的{{1}}部分中
commonModal
现在将<div class="modal">
<!-- Use your received data here which get received from parent -->
<your modal code />
</div>
导入到消费/父组件。在父组件中创建数据属性,假设-commonModal
,并且要在isVisible: false
中显示的data
的计算属性,使modal
。
现在像这样使用它
modalContent
以上内容将帮助您重用模式,而您只需要从父组件发送<main class="foo">
<commonModal v-show="isVisible" :data="data" />
<!-- Your further code -->
</main>
。
我如何知道已触发哪个模式对话框?
只需验证data
属性即可检查isVisible
是否打开。如果modal
,则您的模态不可见,反之亦然
我的全局对话框组件如何将其当前状态告知其父组件
现在,您可能会想如何关闭模态并让父组件知道它。
单击按钮触发器isVisible = false
创建一个方法-closeModal
,并在commonModal组件内部,并closeModal
一个事件。
emit
现在,这将发出一个自定义事件,使用方组件可以监听该事件。
因此,在您的父组件中,只需使用以下自定义事件即可,如下所示,然后关闭模式
closeModal() {
this.$emit('close-modal')
}