vite+vue3 动态导入某文件夹下vue文件并使其成为动态组件

<template>
    <navLayout :isShowHeader="false">
        <template #nav>
            <div v-for="(item, index) in data" :key="index">
                <el-button @click="change(item)">{{ item.name }}</el-button>
            </div>
        </template>
        <template #article>
            <component :is="dom[component]" v-if="showCom" />
        </template>
    </navLayout>
</template>

<script setup >
import { ref, reactive, toRefs, onMounted, shallowReactive } from 'vue'
import { useRoute } from 'vue-router';
import navLayout from '@/components/page/nav-layout.vue';
const route = useRoute();
const store = useStore();
const component = ref();
const showCom = ref(false)
const dom = ref({csbj});
const data = store.getters.sidebarRouters[19].children[2].children;
const importComponent = async (componentName) => {
    const component = await import(`../ssbj/${componentName}.vue`);
    return component.default;
};
let componentNames = data.map(item => {
    return item.path.replace('/bj/ssbj/', '')
})

async function loadComponents() {
    const components = {};
    for (const name of componentNames) {
        components[name] = await importComponent(name);
    }
    dom.value = { ...components };
    component.value = 'csbj';
    // 检查所有组件是否已导入完成
    const isLoaded = Object.keys(dom.value).every(name => !!dom.value[name]);
    if (isLoaded) {
        showCom.value = true;
    }
}

loadComponents();



</script>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值