vue 3.0 批量导入全局组件

  • 代码环境
    vue 3.0 + vite +ts

  • 具体代码
    1、在公共组件文件夹中,新建一个index.ts文件,代码如下:

    import { createApp, defineAsyncComponent } from 'vue'
    export default {
        install: function (app: ReturnType<typeof createApp>): void {
            const modules = import.meta.glob('./*.vue');
            const components = import.meta.globEager('./*.vue');
            Object.keys(modules).forEach((key: string) => {
                const viewSrc = components[key];
                const file = viewSrc.default;
                const AsyncComponent = defineAsyncComponent(modules[key])
                app.component(file.name, AsyncComponent)
            });
        }
    }
    

    上面代码中的 file.name 是对应组件的 name 值,所以组件必须有 name,如:

    <script lang="ts">
    import { defineComponent } from 'vue'
    export default defineComponent({
        name:'vHeader'
    })
    </script>
    

    2、在main.ts中引入index.ts文件

    import Components from './components/common/index'
    app.use(Components)
    

    3、在文件中使用

    <template>
    	<vHeader></vHeader>
    </template>
    
  • 代码环境
    vue 3.0 + webpack + ts

  • 具体代码
    1、在公共组件文件夹中,新建一个index.ts文件,代码如下:

    import { createApp} from 'vue'
    const ctx = require.context('./', false, /\.vue$/)
    export default {
        install: function (app: ReturnType<typeof createApp>): void {
            const arr = ctx.keys().filter((item:any)=> true)
            arr.forEach((item:any)=>{
                const componentConfig = ctx(item)
                const name = item.split("/")[1].replace(/\.vue$/g, '')
                console.log('name', name)
                app.component(name, componentConfig.default || componentConfig)
            })
        }
    }
    

    上面代码中的 name 是对应组件文件名称,例如VHeader.vue

    1、在main.ts中引入index.ts文件

    import Components from './components/common/index'
    app.use(Components)
    

    2、在文件中使用

    <template>
    	<vHeader></vHeader>
    </template>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值