import Vue from 'vue'
import Router from 'vue-router'
import login from '@/components/login.vue'
import home,{titleText} from '@/components/home.vue';
console.log('欢迎访问',titleText);
const requireComponent = require.context('@/components/air', true, /\.vue$/);
var routes = [
{
path:'/',
redirect:{name:'home'}
},
{
path: '/login',
name: 'login',
component: login
},
{
path: '/home',
name: 'home',
meta:{'linkName': titleText},
component:home,
children:[]
}];
const homeIndex = routes.length -1;
const route_base = requireComponent.keys().map(fileName => {
const componentConfig = requireComponent(fileName);
const componentName = fileName.replace(/^\.\//,'').replace(/\.vue$/,'');
const componentNameRe = componentName.replace(/\//g,'-');
const component = Vue.component(componentNameRe,componentConfig.default || componentConfig);
const result = {
path: '/'+componentName,
name: componentNameRe,
meta:{'linkName':componentConfig.titleText},
component,
children:[]
}
const arr = componentNameRe.split('-');
if(arr.length>1){
equivalArray(arr,result);
}else{
routes[homeIndex].children.push(result);
}
return result
});
function equivalArray(arr,result){
arr.pop();
var pname = arr.join("-")
recursiveTraverse(routes[homeIndex],(node)=>{
if(node.name == pname){
node.children.push(result);
}
})
}
function recursiveTraverse(node, action) {
if (!node || !node.children) { return; }
action(node);
node.children.forEach(function(item, index) {
recursiveTraverse(item, action);
});
}
Vue.use(Router);
export default new Router({
mode: 'hash',
routes:routes
})
console.log(routes,'of');
思路:
- 通过 require.context导入路由页所有的文件
- 通过 requireComponent.keys().map() 遍历生成 route 路由树
- 通过 recursiveTraverse() 递归绑定父子级路由关系
- 最终避免了手写海量路由的痛苦。