当前位置: 首页 > news >正文

vue3+vite 实现动态引入某个文件夹下的组件 - glob-import的使用

在这里插入图片描述

<template><div class="user-content"><HeaderTitle title="用户详情"></HeaderTitle><div class="main-content"><div><UserForm /></div><div><TableList></TableList></div><div><BarChart /></div><div><component :is="myComponents[currentActive]"></component></div></div></div>
</template>
<script setup lang="ts">
import UserForm from './components/UserForm.vue';
import TableList from './components/TableList.vue';
import BarChart from './components/BarChart.vue';const currentActive = ref('UserForm')
const myComponents = reactive<any>({})
onMounted(async ()=>{const modules:any = import.meta.glob('./components/*.vue');for(const path in modules){const module = await modules[path]();const componentName = path.replace(/^\.\/components\/(.*)\.vue$/,'$1');// 方案一 普通引入// myComponents[componentName] = module.default;// 方案二 异步组件// myComponents[componentName] = defineAsyncComponent(()=>import(path));  // 这种用法vite会有警告myComponents[componentName] = defineAsyncComponent(modules[path]); // 直接使用meta.glob加载的组件即可console.log('myComponents: ', myComponents);}})
</script>

动态引入的使用场景:

  • 场景:一般是通过tab来切换显示不同的组件。tab列表中我们配置好需要显示哪些组件,记录当前活动的tab(currentActive),然后在 component 组件中使用。
  • 优点: 在组件较多的情况下,不用手动写多条引入代码。

vite 官网文档 – glob-import
https://www.vitejs.net/guide/features.html#glob-import
参考文章
Vue3+vite项目中如何动态导入并创建多个全局组件


修改

在这里插入图片描述
在第一次写完之后没有注意到这个警告,查了一下后发现了这个问题解决方法。
在这里插入图片描述

所以我们不能直接只用url的方式动态的import组件,需要直接使用modules中提供对象的值就可以,我居然以为需要用path去加载组件(所以写了()=>import(path)),其实只需要用modules对象中的值就可以啦。


//错误
myComponents[componentName] = defineAsyncComponent(()=>import(path));  // 这种用法vite会有警告//正确
myComponents[componentName] = defineAsyncComponent(modules[path]); // 直接使用meta.glob加载的组件即可

可以看出modules是这样的对象,键是文件的路径,值是()=>import(path)
在这里插入图片描述

相关文章:

  • Unity UGUI 之 自动布局组件
  • 【Linux】进程信号 --- 信号处理
  • ResNet学习笔记
  • [数据集][目标检测]躺坐站识别检测数据集VOC+YOLO格式9488张3类别
  • 直线与曲线的交点
  • 要是项目从jdk8完全迁移到jdk21难度大吗
  • 机器学习 | 分类算法原理——逻辑回归
  • 使用图数据库Nebula Graph快速上手史上最大规模的中文知识图谱ownthink_v2教程(没写完,明天再写)
  • 鸿蒙OpenHarmony Native API【drawing_color.h与drawing_font_collection.h】 头文件
  • 删除的视频怎样才能恢复?详尽指南
  • LeetCode Hot100 搜索二维矩阵
  • 多线程处理大文本查找字符串出现的次数
  • 使用大型语言模型进行文档解析(附带代码)
  • PyCharm 2024.1最新变化
  • Vue使用FullCalendar实现日历/周历/月历
  • 【node学习】协程
  • 【附node操作实例】redis简明入门系列—字符串类型
  • Android框架之Volley
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • DataBase in Android
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Java 多线程编程之:notify 和 wait 用法
  • leetcode-27. Remove Element
  • Linux各目录及每个目录的详细介绍
  • node.js
  • PHP那些事儿
  • vue 个人积累(使用工具,组件)
  • webpack4 一点通
  • 不上全站https的网站你们就等着被恶心死吧
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 前端之Sass/Scss实战笔记
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 山寨一个 Promise
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 我的面试准备过程--容器(更新中)
  • 小李飞刀:SQL题目刷起来!
  • 原生JS动态加载JS、CSS文件及代码脚本
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • MyCAT水平分库
  • scrapy中间件源码分析及常用中间件大全
  • #pragma 指令
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (超详细)语音信号处理之特征提取
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (利用IDEA+Maven)定制属于自己的jar包
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (算法)N皇后问题