首页IT科技Vue 动态style(vue3 动态加载组件、动态引入组件)

Vue 动态style(vue3 动态加载组件、动态引入组件)

时间2025-05-04 12:31:48分类IT科技浏览5003
导读:1.问题...

1.问题

在做一个用vite构建的vue3项目时             ,动态拉取导入.vue页面                    ,然后控制台一直有以下提示       ,页面也无法渲染出来             。

2.分析 根据上面的报错提示             ,让我们安装并使用:@rollup/plugin-dynamic-import-vars 这个插件(最终没有这个方案)                    。

Vite官方文档说需要使用Glob 导入形式                    ,然后看了一个Glob的文档       ,解决了这个问题(亲测可行)       。

首先需要使用特殊的import.meta.glob函数从文件系统导入多个模块:

const modules = import.meta.glob(../views/*/*.vue);

他会匹配并导入所有相关的组件:

// vite 生成的代码 const modules = { ./views/foo.vue: () => import(./views/foo.vue), ./views/bar.vue: () => import(./views/bar.vue) }

那么回到项目中      ,在home文件夹下的index.vue文件中导入custom_components文件夹下的所有.vue文件

因此                    ,根据vite的import.meta.glob函数:就可以获得对应的custom_components文件夹下的.vue文件 const changeComponents = (e:string)=>{ const link = modules[`../custom_components/${e}.vue`] console.log(link,link) }

打印link可以看到

最后就是异步注册组件 layouts.value = markRaw(defineAsyncComponent(link))

3.最后 下面贴出完整案例             ,仅供参考      。有更好的或者需要优化的可以提问一起探讨                    。

<template> <div @click="changeComponents(kk)">显示kk.vue</div> <div @click="changeComponents(index)">显示index.vue</div> <component :is="layouts"/> </template> <script lang=ts setup> const modules = import.meta.glob(../custom_components/*.vue); let layouts = ref<any>(null) const changeComponents = (e:string)=>{ const link = modules[`../custom_components/${e}.vue`] layouts.value = markRaw(defineAsyncComponent(link)) } </script>

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
仙居贴吧(仙居门户)