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

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

时间2025-08-04 13:21:06分类IT科技浏览7048
导读: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
客服网站源码在哪里找(在线客服系统源码开发实战总结:Golang实现对接微信公众号网页授权接口功能) ai平台 如何应用(AI环境搭建步骤(Windows环境))