美文网首页
Vue 之 自动化全局注册

Vue 之 自动化全局注册

作者: hunter97 | 来源:发表于2018-11-27 16:53 被阅读0次

在开发vue项目过程中,如果路由、组件等过多的话,注册起来是一件很麻烦的事情,这里引入自动化注册会很大程度上减少工作量。
webpack使用 require.context 可以动态引入文件,我们可以借助这个方法实现自动化注册。

一、 require.context
  1. require
    const func = require('./dir/first.js');我们可以通过这个方法读取一个文件中的内容,这里一定要注意文件的路径要写对,不然会访问不到文件。
  2. require.context
    在刚才的过程中,webpack 会创建一个 require.context ,通过正则匹配到可能的文件,全部引入。如果我们想自定义这个正则规则的话,可以自己写一个 require.context
    语法:require.context('./dir', true, /\.js$/);第一个参数表示相对的文件目录,第二个参数表示是否包括子目录中的文件(true,false),第三个参数表示引入的文件匹配的正则表达式。
    实例:
const context = require.context('./dir', true, /\.js$/);
const keys = context.keys(); // => ["./another-first-level.js", "./first-level.js", "./sub-dir/second-level.js"]
二、开发实例
  1. 自动化部署路由
//./router/index.js

//404中转页面
import Transit from '@/page/Transit'

//自动化部署
const requireComponent = require.context('../page', true, /\.vue$/);
const routes = requireComponent.keys().map(fileName => {
    // 获取组件配置
    const componentConfig = requireComponent(fileName);
    // 剥去文件名开头的 `./` 和`.vue`结尾的扩展名
    const componentName = fileName.replace(/^\.\//,'').replace(/\.vue$/,'');
    // 全局注册组件
    const component = Vue.component(
        componentName.replace(/\//,'-'),
        // 如果这个组件选项是通过 `export default` 导出的,那么就会优先使用 `.default`,否则回退到使用模块的根。
        componentConfig.default || componentConfig
    );
    return {
        path: '/'+componentName,
        name: componentName.replace(/\//,'-'),
        component
    }
});

//添加404页面
let notFoundPage = {
    path: '*',
    name: '404',
    component: Transit
};
routes.push(notFoundPage);

Vue.use(Router);

export default new Router({
    routes
})
  1. 自动化注册全局组件
//main.js
//自动化注册全局组件
const requireComponent = require.context('./components/global', true, /\.vue$/);
requireComponent.keys().forEach(fileName => {
    // 获取组件配置
    const componentConfig = requireComponent(fileName);
    // 剥去文件名开头的 `./` 和`.vue`结尾的扩展名
    const componentName = fileName.replace(/^\.\//,'').replace(/\.vue$/,'');
    // 全局注册组件
    const component = Vue.component(
        componentName.replace(/\//,'-'),
        componentConfig.default || componentConfig
    );
});

欲望以提升热忱,毅力以磨平高山。

相关文章

  • Vue 之 自动化全局注册

    在开发vue项目过程中,如果路由、组件等过多的话,注册起来是一件很麻烦的事情,这里引入自动化注册会很大程度上减少工...

  • vue组件

    关于vue组件的总结 注册组件 vue中组件的注册分为两种: 全局注册 局部注册 全局注册 全局注册的组件在任何v...

  • 深入了解组件

    组件注册   组件注册分为全局注册和局部注册  全局注册   局部注册   基础组件的自动化全局注册可能你的许多组...

  • vue的组件注册

    vue的组件注册: 全局注册 局部注册

  • vue 之 全局注册

    一、全局组件 新建一个组件文件夹,如cp。 组件文件在cp文件夹中新建vue组件文件,如cp.vue 组件入口文件...

  • Vue 之 组件

    组件注册 组件注册分为两种: 全局注册 和 局部注册 全局注册:全局注册的行为必须在根 Vue 实例 ...

  • 2018-06-28 Vue源码解析阅读笔记

    Vue的全局API 里面定义了Vue的全局变量,比如Vue.init()、Vue.component()注册全局组...

  • vue学习(68)vue3中的其他改变

    全局API的转移 Vue 2.x 有许多全局 API 和配置例如:注册全局组件、注册全局指令等。 Vue3.0中对...

  • 基础组件的自动化全局注册

    基础组件的自动化全局注册

  • vue 的组件注册

    1、 全局注册: 全局注册后,任何 Vue 实例都可以使用。示例如下: Vue.component('my-com...

网友评论

      本文标题:Vue 之 自动化全局注册

      本文链接:https://www.haomeiwen.com/subject/apkrqqtx.html