如何在 vue-class-component 中使用动态组件

Posted

技术标签:

【中文标题】如何在 vue-class-component 中使用动态组件【英文标题】:How to use dynamic component in vue-class-component 【发布时间】:2021-10-27 02:49:16 【问题描述】:

我使用 vue vue-class-component 并且效果很好:

import vuetify from '@/plugins/vuetify'
@Component(
    components: 
        vue2Dropzone
    ,
    vuetify
)

但是当我尝试添加仅用于生产的新组件时:

import store from '../store/Index'
let storeTmp = process.env.NODE_ENV === 'production' ? store : null
@Component(
    components: 
        vue2Dropzone
    ,
    vuetify,
    storeTmp
)

我有错误:

类型参数 ' components: vue2Dropzone: any ; Vuetify:Vuetify; storeTmp: 存储<...> |空值; ' 不可分配给“VueClass”类型的参数。对象字面量只能指定已知属性,但“VueClass”类型中不存在“组件”。你的意思是写“组件”吗?

我该如何解决?

【问题讨论】:

【参考方案1】:

也许

@Component(
    components: 
        vue2Dropzone
    ,
    vuetify,
    store: storeTmp
)

?

Vue 实例中没有 storeTmp 属性,但是有 store

【讨论】:

【参考方案2】:

您可以在此使用计算。当您想根据某些条件加载组件时

在模板中

<component v-bind:is="importComponent" :anyPropsYouWantToPas="props" />

在计算中

importComponent() 
    if (process.env.NODE_ENV === 'production) 
        return () => import(`@/components/app/componentpath`)
    
,

【讨论】:

以上是关于如何在 vue-class-component 中使用动态组件的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 Webpack 以便能够在单文件组件(.vue)和“vue-class-component”类中使用 Pug?

vue-class-component:如何创建和初始化反射数据

如何通过 vue-class-component 使用 Vue Router 延迟加载?

vue-class-component 语法中 vue-models(因此,“props”)的计算 getter/setter

Vuelidate 与 Vue 3 + vue-class-component + TypeScript

vue-class-component : 调用类方法时 TS2339