1 原理
import.meta.glob() 其实不仅能接收一个字符串,还可以接收一个字符串数组,就是匹配多个位置
let RouterModules = import.meta.glob(["/src/view/*/*.vue", "/src/view/*.vue"]);
这样我们就拿到了相对路劲的组件对象,通过@/views/ 绝对路径匹配不行,只能相对路径;
2 调用样例
1)这样我 通过 字符串拿到组件方法,然后 await 组件方法() 加载组件
2)也可以等待 nextTick() 后,再执行组件内的方法
<template><button @click="openAudit('agency/project/projectAudit.vue')">审批</v-btn> <!-- 审批表单组件 --><component ref="auditRef" :is="auditComponent" v-if="auditComponent"></component>
</template><script setup>// 动态审批组件const auditRef = ref()// 动态审批组件引用const auditComponent = ref(null)//通过glob 将制定 制定路径加载至 map对象,key为路径,value 组件的加载方法,需执行后才能加载const viteComponents = import.meta.glob('../../**/*.vue')//打开相应的审批表单const openAudit = async (vuePath) => {const componentPath = `../../${vuePath}`try {const module = await viteComponents[componentPath]()auditComponent.value = module.default || moduleawait nextTick()// 调用组件的 open 方法auditRef.value.open()} catch (error) {console.error(`Failed to load component ${componentPath}:`, error)auditComponent.value = null // Or handle the error appropriately}}
</script>