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使用exif获取图片旋转,压缩的示例代码
Dec 11 Vue.js
vue 数据操作相关总结
Dec 17 Vue.js
vuex的使用和简易实现
Jan 07 Vue.js
Vue 数据响应式相关总结
Jan 28 Vue.js
详解Vue3.0 + TypeScript + Vite初体验
Feb 22 Vue.js
vue实现倒计时功能
Mar 24 Vue.js
vue前端工程的搭建
Mar 31 Vue.js
Vue中插槽slot的使用方法与应用场景详析
Jun 08 Vue.js
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 Vue.js
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 Vue.js
vue数据字典取键值项目的字典问题
Apr 12 Vue.js
vue项目proxyTable配置和部署服务器
Apr 14 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
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
PHP 之Section与Cookie使用总结
2012/09/14 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
JavaScript 异步调用框架 (Part 4 - 链式调用)
2009/08/04 Javascript
javascript 进阶篇3 Ajax 、JSON、 Prototype介绍
2012/03/14 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
计算新浪Weibo消息长度(还可以输入119字)
2013/07/02 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
2013/11/22 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
JQuery fileupload插件实现文件上传功能
2016/03/18 Javascript
省市联动效果的简单实现代码(推荐)
2016/06/06 Javascript
jQuery简单创建节点的方法
2016/09/09 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
2020/09/21 Javascript
Python程序语言快速上手教程
2012/07/18 Python
Python实现获取操作系统版本信息方法
2015/04/08 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
对python 矩阵转置transpose的实例讲解
2018/04/17 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
2018/10/28 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
2019/02/21 Python
pyQT5 实现窗体之间传值的示例
2019/06/20 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
CSS3图片旋转特效(360/60/-360度)
2013/10/10 HTML / CSS
html5清空画布方法(三种)
2017/10/16 HTML / CSS
phpquery中文手册
2021/03/18 PHP
美国香薰蜡烛品牌:PADDYWAX
2018/10/06 全球购物
DERMAdoctor官网:美国著名皮肤护理品牌
2019/07/06 全球购物
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
学生打架检讨书1000字
2014/01/16 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android