vue使用require.context实现动态注册路由


Posted in Vue.js onDecember 25, 2020

需求场景:

在日常的功能练习和调试过程中,需要一个demo项目进行功能测试,由于频繁.vue页面的同时,又要再router.js文件里面注册路由,感觉有点无聊和枯燥。基于此出发点,考虑能否自动读取文件夹下的文件进行路由注册。

借鉴思路:

参考vue的功能基础组件的自动化全局注册,看到一个require.context方法,可以读取某个文件夹下的文件信息。因此考虑,使用这个方法,获取views文件夹下的.vue页面,文件夹名称作为路由名称

require.context的使用介绍:

一个webpack的api,通过执行require.context函数获取一个特定的上下文,主要用来实现自动化导入模块,在前端工程中,如果遇到从一个文件夹引入很多模块的情况,可以使用这个api,它会遍历文件夹中的指定文件,然后自动导入,使得不需要每次显式的调用import导入模块

页面代码:

如下图示,views文件夹下的内容,都需要进行路由注册。

文件的路径有2种,(1)简单的vue功能页面,直接挂在views文件夹下;(2)复杂的页面,在views下在新建文件夹进行处理。

目前需要自动注册的路由页面,是针对“直接挂在views文件夹”下的页面。(因为views下的二级页面,暂时没有想到好的方案)

vue使用require.context实现动态注册路由

router/index.js页面代码

心路历程:

(1)一开始的想法,是想着用数组对象的方式定义好,路由名称和引入的路径地址,但是觉得还是不够自动化,新建.vue文件的时候还是需要手动添加;

(2)后来想到用使用require.context方法得到fileName,然后根据字符串裁减和拼接,得到我所需的url和文件相对路径;

例如: component: () =>import(【变量】),但是后来发现,import()里面,不能使用变量!!!!!!!!!

原因:根据es6module语法,由于import是静态执行,所以不能使用表达式和变量这些只有在运行时才能得到结果的语法结构。

(3)由由于import的使用限制,不能动态使用() =>import的语法,因此在考虑,能否直接替换掉这种异步加载引入的写法。经过分析,得出pathConfig字段里面有一个属性的内容,是指定的vue页面的default模块内容。经测试,可以使用。

pathConfig的打印内容如下示:

vue使用require.context实现动态注册路由

(4)因此“views”文件夹下的".vue"文件,引入成功,并用变量routerAry存储起来,使用concat方法把其他需要手动注册的路由信息,连接起来,进行路由注册。

import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)


// 查询指定文件夹下的vue页面,自动注册路由
// 仅适用于:一个文件夹下的多个路由页面。用于简单的页面的注册
// pathConfig.default的内容,是指定的vue页面的default模块内容,等同于: () => import('xxxx')
const contextInfo = require.context('../views', false, /.vue$/);
let routerAry = []
contextInfo.keys().forEach(fileName => {
  const pathConfig = contextInfo(fileName)
  let path = "/" + fileName.substring(2,fileName.length-4)
  routerAry.push({
    path,
    component: pathConfig.default
  })
})

const routerList = [
  {
    path: "/",
    redirect: "/animate",
  },
  {
    path: "/openlayers",
    component: () => import('../views/openlayers/openlayers')
  },{
    path: "/render",
    component: () => import('../views/render/render')
  },{
    path: '/vuex',
    component: () => import('../views/vuex/vuex')
  },{
    path: "/echarts",
    component: () => import('../views/echarts/echarts')
  },{
    path: "/ztree",
    component: () => import('../views/ztree/ztree')
  },{
    path: "/ocxplayer",
    component: () => import('../views/ocxplayer/ocxplayer')
  },{
    path: "/animation",
    component: () => import('../views/animation/animation')
  },
]
const newRouterAry = routerList.concat(routerAry)
const router = new VueRouter({
  routes: newRouterAry
})
export default router

以上就是vue使用require.context实现动态注册路由的详细内容,更多关于vue 动态注册路由的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
vue + el-form 实现的多层循环表单验证
Nov 25 Vue.js
vue中defineProperty和Proxy的区别详解
Nov 30 Vue.js
如何实现vue的tree组件
Dec 03 Vue.js
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
vue中利用three.js实现全景图的完整示例
Dec 07 Vue.js
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 Vue.js
详解Vue2的diff算法
Jan 06 Vue.js
vue-quill-editor插入图片路径太长问题解决方法
Jan 08 Vue.js
vue集成一个支持图片缩放拖拽的富文本编辑器
Jan 29 Vue.js
vue backtop组件的实现完整代码
Apr 07 Vue.js
前端vue+express实现文件的上传下载示例
Feb 18 Vue.js
vue 使用rules对表单字段进行校验的步骤
Dec 25 #Vue.js
vue 实现基础组件的自动化全局注册
Dec 25 #Vue.js
vue 使用class创建和清除水印的示例代码
Dec 25 #Vue.js
基于vue+echarts数据可视化大屏展示的实现
Dec 25 #Vue.js
vue3使用vue-count-to组件的实现
Dec 25 #Vue.js
vue+openlayers绘制省市边界线
Dec 24 #Vue.js
vue项目中openlayers绘制行政区划
Dec 24 #Vue.js
You might like
php5 and xml示例
2006/11/22 PHP
php 验证码制作(网树注释思想)
2009/07/20 PHP
php一维二维数组键排序方法实例总结
2014/11/13 PHP
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
在网页中控制wmplayer播放器
2006/07/01 Javascript
纯JS实现动态时间显示代码
2014/02/08 Javascript
javascript中对变量类型的判断方法
2015/08/09 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
jquery仿QQ登录账号选择下拉框效果
2016/03/22 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
Node.js使用gm拼装sprite图片
2017/07/04 Javascript
webpack处理 css\less\sass 样式的方法
2017/08/21 Javascript
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
python日期时间转为字符串或者格式化输出的实例
2018/05/29 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
解决Atom安装Hydrogen无法运行python3的问题
2019/08/28 Python
如何利用Python动态模拟太阳系运转
2020/09/04 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
美国在线健康和美容市场:Pharmapacks
2018/12/05 全球购物
银行门卫岗位职责
2013/12/29 职场文书
九年级语文教学反思
2014/02/04 职场文书
装饰活动策划方案
2014/02/11 职场文书
《自选商场》教学反思
2014/02/14 职场文书
党员干部廉洁承诺书
2014/05/28 职场文书
国际贸易专业求职信
2014/06/04 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
成事在人观后感
2015/06/16 职场文书
教师节校长致辞
2015/07/31 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
Python各协议下socket黏包问题原理
2022/04/12 Python
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python