vue-router动态生成路由,根据新创建的文件生成相应路由,需要用到require.context();
let path = require.context("需要读取的文件夹路径",是否读取子集true|false,匹配的文件结尾
/\.vue$/ || /\.js$/.js或者.vue结尾的文件, 同步异步加载 )
返回的 path.keys();获取对象
用文件名组routes对象(我只组了一个一级的,拿到返回的数据可以组一些多层级的吧,咋感觉干这件事清意义不大 ....)
还是举个栗子吧(代码别人那里拿来的,自己写了一遍)
let filePath = require.context('./views', true, /\.vue$/ || /\.js$/, 'lazy');
import Vue from 'vue';
import Router from 'vue-router';
Vue.use(Router);
let siteRoutes: any = [];
function importAll(r: any) {//r 参数自带两个处理属性一个keys 一个是resolve 这里用的keys 具体看官网APi: context module API
r.keys().forEach((key: string) => {
let path = (key.split('.'))[1];//key 就是带了./的文件名 比如我这里打印出来是./About ./Home ./Test 这样你就懂path 和name为什么这样写
path.indexOf('Home') > -1 ? path = '/' : '';// home页面会被解析为/home,/ 访问为空白,所以做个判断path转为 / 。
siteRoutes.push({
path: path,
name: path.substring(1),
component: () => r(key)
})
});
}
importAll(filePath);
let routes = [...siteRoutes]