【发布时间】:2020-01-24 14:13:28
【问题描述】:
我有以下父组件,它必须呈现动态子组件列表:
<template>
<div>
<div v-for="(componentName, index) in supportedComponents" :key="index">
<component v-bind:is="componentName"></component>
</div>
</div>
</template>
<script>
const Component1 = () => import("/components/Component1.vue");
const Component2 = () => import("/components/Component2.vue");
export default {
name: "parentComponent",
components: {
Component1,
Component2
},
props: {
supportedComponents: {
type: Array,
required: true
}
}
};
</script>
supportedComponents 属性是我想在父组件中呈现的组件名称列表。
为了在父组件中使用子组件,我必须导入它们并注册它们。
但唯一的方法是硬编码组件的导入路径:
const Component1 = () => import("/components/Component1.vue");
const Component2 = () => import("/components/Component2.vue");
然后像这样注册它们:
components: {
Component1,
Component2
}
我想让我的parentComponent 尽可能通用。这意味着我必须找到一种方法来避免在导入语句和注册时硬编码组件路径。我想向parentComponent 注入它应该导入和渲染的子组件。
这在 Vue 中可行吗?如果是,那么如何?
【问题讨论】:
-
你能把组件作为道具传递吗?但是在某个地方你必须静态导入组件。
import()是在编译时解析的,所以需要在编译时拥有。
标签: javascript vue.js vuejs2 vue-component