vue动态管理组件(全局注册则在main.js引入global.js)

104 阅读1分钟

一、在components目录下新建global.js

global.js的内容如下:

// 动态管理组件
import Vue from "vue";

// 常规写法
// import Child1 from "./child1";
// import Child2 from "./child2";
// Vue.use(Child1)
// Vue.use(Child2)

// 动态写法
// 首字母大写
function changeStr(str){
    return str.charAt(0).toUpperCase() + str.slice(1)
}

// 将字符串首字母大写 返回当前字符串 context('./', false, /\.vue$/)
// 1、当前路径
// 2、是否匹配子级
// 3、文件格式
const requireComponent = require.context('./', false, /\.vue$/)
// console.log('requireComponent.keys()', requireComponent.keys())

requireComponent.keys().forEach(_fileName => {
    // console.log("_fileName",_fileName)
    const config = requireComponent(_fileName);
    // console.log("_fileName.replace(/^\.\//, '')", _fileName.replace(/^\.\//, ''))
    // console.log("_fileName.replace(/^\.\//, '')", _fileName.replace(/\.\w+$/, ''))

    //筛选组件名称并且组件名称首字母大写
    const componentName = changeStr(
        // _fileName.replace(/^\.\//, '')去掉 "./"
        // _fileName.replace(/\.\w+$/, '')去掉 ".vue"
        _fileName.replace(/^\.\//, '').replace(/\.\w+$/, '')
    )
    // console.log('componentName', componentName)

    // 注册组件
    // console.log('config.default', config.default)
    Vue.component(componentName, config.default || config)
});

二、全局注册则在main.js引入global.js