首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Vue 3使用动态导入的动态组件

Vue 3使用动态导入的动态组件
EN

Stack Overflow用户
提问于 2020-12-20 09:45:35
回答 1查看 3.8K关注 0票数 4

我使用Vue 3,我有一个动态组件。它需要一个名为componentName的道具,这样我就可以向它发送任何组件。挺管用的,有点。

模板的一部分

代码语言:javascript
运行
复制
<component :is="componentName" />

问题是,我仍然需要导入所有可能的组件。如果我将About作为componentName发送,则需要导入About.vue

脚本的一部分

我导入可以添加到componentName中的所有可能组件。有30个可能的组件,这将是一个很长的名单。

代码语言:javascript
运行
复制
import About "@/components/About.vue";
import Projects from "@/components/Projects.vue";

问题

有一种方法可以动态导入所使用的组件吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-20 09:56:32

在我的模板中,我已经遇到了同样的情况,当时我试图制作一个图标演示,这些图标都是1k以上的图标组件,所以我使用了类似于的东西:

代码语言:javascript
运行
复制
import {defineAsyncComponent,defineComponent} from "vue";

const requireContext = require.context(
    "@/components", //path to components folder which are resolved automatically
    true,
    /\.vue$/i,
    "sync"
);
let componentNames= requireContext
    .keys()
    .map((file) => file.replace(/(^.\/)|(\.vue$)/g, ""));

let components= {};

componentNames.forEach((component) => { //component represents the component name
    components[component] = defineAsyncComponent(() => //import each component dynamically
        import("@/components/components/" + component + ".vue")
    );
});
export default defineComponent({
    name: "App",
    data() {
        return {
            componentNames,// you need this if you want to loop through the component names in template
         
        };
    },
    components,//ES6 shorthand of components:components or components:{...components }

});

了解更多关于require.context的信息

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65378635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档