zoukankan      html  css  js  c++  java
  • vue 动态添加路由 require.context()

    之前的写法 

    'use strict' 
    import Vue from 'vue'
    import MessageBroadcast from 'page/MessageBroadcast'
    import Survey from 'page/Survey'
    import MessageFingure from 'page/MessageFingure'
    import InterfaceMonitor from 'page/InterfaceMonitor'
    import PowerDivisioin from 'page/PowerDivisioin'
    import ApiInfo from 'page/ApiInfo'
    import UserInfo from 'page/UserInfo'
    import CodeTable from 'page/CodeTable'
    import PowerToMe from 'page/PowerToMe'
    import MessageConfig from 'page/MessageConfig'
    
    Vue.component('MessageBroadcast', MessageBroadcast)
    Vue.component('Survey', Survey)
    Vue.component('MessageFingure', MessageFingure)
    Vue.component('InterfaceMonitor', InterfaceMonitor)
    Vue.component('PowerDivisioin', PowerDivisioin)
    Vue.component('ApiInfo', ApiInfo)
    Vue.component('UserInfo', UserInfo)
    Vue.component('CodeTable', CodeTable)
    Vue.component('PowerToMe', PowerToMe)
    Vue.component('MessageConfig', MessageConfig)

    今天刚搞明白 如何通过webpack 去动态加载路由 

    网上有很多方法,但是挺多都不好用,所以我把自己成功实现的 贴出来。

    require.context(directory, useSubdirectories = false, regExp = /^.//)

    参数说明:

         1. 你要引入文件的目录

            2.是否要查找该目录下的子级目录

            3.匹配要引入的文件

    返回:
           1. context.require 返回一个require 函数:

      function webpackContext(req) {
        return __webpack_require__(webpackContextResolve(req));
      }
        2. 改函数有三个属性:resolve 、keys、id

            · resolve: 是一个函数,他返回的是被解析模块的id

            · keys: 也是一个函数,他返回的是一个数组,该数组是由所有可能被上下文模块解析的请求对象组成

            · id:上下文模块的id

    import Vue from 'vue'
    function capitalizeFirstLetter(str) {
      return str.charAt(0).toUpperCase() + str.slice(1)
    }
    function validateFileName(str) {
      return /^S+.vue$/.test(str) &&
        str.replace(/^S+/(w+).vue$/, (rs, $1) => capitalizeFirstLetter($1))
    }
    const requireComponent = require.context('./', true, /.vue$/)
    requireComponent.keys().forEach(filePath => {
      const componentConfig = requireComponent(filePath)
      const fileName = validateFileName(filePath)
      const componentName = fileName.toLowerCase() === 'index'
        ? capitalizeFirstLetter(componentConfig.default.name)
        : fileName
      Vue.component(componentName, componentConfig.default || componentConfig)
    })

    实现效果,

    成功的动态加载了 Page文件夹下面所有的名为index.vue的组件

  • 相关阅读:
    野生的男人,家养的猪
    能在xcode5中开发基于IOS7sdk的应用程序兼容ios4.3之后的系统吗?
    ios开发怎样才能做到代码和界面彻底分离,方便换肤?
    如何解决iOS6、iOS7 3.5寸和4.0寸屏的适配问题?不要写两个xib文件
    哪些听起来很牛逼的互联网理念!
    iOS 使用宏 常量 报错 expected expression
    ios测试宏指令出错:“Expected identefier”
    某个 页面覆盖了 UITabBar 的tabItem的解决办法
    ios(包括6、7)应用程序引用系统通讯录的方法 [亲测可行]
    ios 获得通讯录中联系人的所有属性 亲测,可行 兼容io6 和 ios 7
  • 原文地址:https://www.cnblogs.com/yasoPeng/p/10102700.html
Copyright © 2011-2022 走看看