【发布时间】:2021-03-26 09:50:21
【问题描述】:
我想要一个模态包装器,我可以将组件注入其中,因此模态负责诸如关闭之类的事情,但是注入的组件负责显示的内容以及对数据的处理。到目前为止,我有这个解决方案,
const Modal = namespace("Modal");
@组件 导出默认类 AppModal 扩展 Vue {
public component: any = null;
@Modal.State
public modalVisible!: boolean;
@Modal.State
public modalComponent!: string;
get injectedComponent() {
return this.modalComponent;
}
@Modal.Mutation
public hideModal!: () => void
@Watch('injectedComponent')
onModalComponent(componentName: string) {
if(!componentName) return;
debugger;
Vue.component(componentName, () => import(`./components/${componentName}`))
this.component = componentName;
}
store 中的 showModal 方法,使 modalVisible 并获取一个 componentName,我们监听这个变化并导入组件,并使用动态组件将其注入到 modal 中。
<template>
<v-dialog v-model="modalVisible" class="muc-modal" max-width="350" persistent>
<v-card>
<component :is="modalComponent"/>
</v-card>
</v-dialog>
无论我发送给观察者的组件名称,我都会收到以下错误,
未知的自定义元素:
好像它无法解析我想要发送到我的 AppModal 的组件。我做错了什么吗?
【问题讨论】:
-
为什么是 this.component = componentName,而不是 this.modalComponent= componentName?并且 ()=> import 返回promise,因此您可以在“then”子句中更新组件名称。
标签: javascript typescript vue.js vuex