vite+vue3展示文件夹内的所有组件
在组件目录下新建index.js
import { markRaw } from "vue"; const filesNameList = []; const files = import.meta.glob("./*.vue"); for (const key in files) { const fileName = key.replace(/(\.\/|\.vue)/g, ""); filesNameList.push(fileName); } // 导出当前目录下的所有.vue的文件 export default markRaw(filesNameList);
展示所有组件 index.vue
<template> <div class="drag-box"> <div class="head"> <h3>组件列表</h3> </div> <div class="compList"> <!-- 渲染所有组件 --> <el-card class="items" shadow="hover" v-for="element in componentList" :key="element.FileName" > <div class="title"><b>组件名: </b>{{ element.FileName }}</div> <div class="compMian"> <component :is="element.component"></component> </div> </el-card> </div> </div> </template> <script setup> import { ref, defineAsyncComponent, markRaw } from "vue"; // 引入modules目录下所有的模板名称数组 import allComps from "./modules"; const componentList = ref([]); allComps.map((v) => { let item = { FileName: "", component: null, }; item.FileName = v; // 导入组件 item.component = markRaw( defineAsyncComponent(() => import(`./modules/${v}.vue`)) ); // 组件列表追加组件信息 componentList.value.push(item); }); </script> <style lang="less" scoped> .drag-box .items { width: 100%; margin: 20px 0; border-bottom: solid 1px #999; // background-color: #eee; .title { font-size: 18px; line-height: 1.5; margin-bottom: 25px; border-bottom: solid 1px #eee; b { font-size: 22px; } } .compMian { background-color: #fff; } } </style>
目录结构
import { markRaw } from "vue";
const filesNameList = [];
const files = import.meta.glob("./*.vue");
for (const key in files) {
const fileName = key.replace(/(\.\/|\.vue)/g, "");
filesNameList.push(fileName);
}
// 导出当前目录下的所有.vue的文件
export default markRaw(filesNameList);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现