在日常的功能练习和调试过程中,需要一个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下的二级页面,暂时没有想到好的方案)
心路历程:
(1)一开始的想法,是想着用数组对象的方式定义好,路由名称和引入的路径地址,但是觉得还是不够自动化,新建.vue文件的时候还是需要手动添加;
(2)后来想到用使用require.context方法得到fileName,然后根据字符串裁减和拼接,得到我所需的url和文件相对路径;
例如: component: () =>import(【变量】),但是后来发现,import()里面,不能使用变量!!!!!!!!!
原因:根据es6module语法,由于import是静态执行,所以不能使用表达式和变量这些只有在运行时才能得到结果的语法结构。
(3)由由于import的使用限制,不能动态使用() =>import的语法,因此在考虑,能否直接替换掉这种异步加载引入的写法。经过分析,得出pathConfig字段里面有一个属性的内容,是指定的vue页面的default模块内容。经测试,可以使用。
pathConfig的打印内容如下示:
(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 动态注册路由的资料请关注站长技术其它相关文章!
橡皮擦一个逗趣的互联网高级网虫。 观前提醒本篇文章涉及知识点巨大建议先收藏再...
Go原生就支持连接数据库,所以在使用 Golang 开发时,当需要数据库交互时,即可...
1 . 目标 演示下图的git reset 各选项的效果。 2. Git Reset操作说明 图中说明:...
这些日子一直在简书上使用markdown写作,已经渐渐的痴迷于这种简洁纯粹的写作方...
从另一台机器上复制过来的项目,由于两台机器的库目录不一致,导致了stdio.h等很...
本文实例讲述了正则表达式中的操作符及说明。分享给大家供大家参考,具体如下: ...
3月22日消息 外媒 Winfuture 报道,此前微软面向 Insider 预览用户公布了 Window...
Greediness(贪婪型):最大匹配 X、X*、X+、X{n,} 是最大匹配。例如你要用 “....
ajax 实现三级联动,相当于写了一个小插件,用的时候直接拿过来用就可以了,这里...
2月23日消息 据外媒 Windows Latest 今日报道,借助 Windows 10 Sun Valley 更新...