起因
上家公司的后台管理系统都是刷表刷出来的,所用很久很久没写后台管理系统了。换了工作后总算要开始捣腾 router 了,很久没用都快忘光了,所以把一些通用的模块记录一下,也分享给需要的朋友们。
经过
//router.js
let routes = [
{
path: ‘/’,
redirect: ‘/admin’,
},
{
path: ‘/login’,
name: ‘login’,
meta: {title: ‘ 登录 ’},
component: () => import(‘./components/login.vue’)
},
{
path: ‘/admin’,
name: ‘admin’,
meta: {title: ‘ 主页 ’},
component: () => import(‘./components/admin.vue’),
children: [
{
path: ‘operation’,
name: ‘operation’,
meta: {title: ‘ 运营管理 ’},
component: () => import(‘./components/admin/operation.vue’)
},
{
path: ‘order’,
name: ‘order’,
meta: {title: ‘ 订单中心 ’},
redirect: ‘order/index’,
component: () => import(‘./components/admin/order.vue’),
children: [
{
path: ‘index’,
name: ‘index’,
meta: {title: ”},
component: () => import(‘./components/admin/ordercenter.vue’)
},
{
path: ‘detail’,
name: ‘detail’,
meta: {title: ‘ 订单详情 ’},
component: () => import(‘./components/admin/orderdetail.vue’)
},
]
},
]
},
]
export default routes
这个是我部分的 router 路径配置表
/* 面包屑路径处理 */
eve_breadcrumbItem_change(){
var list = this.$route.fullPath.split(‘/’)//list[0]: 是空格
this.BreadcrumbItem = []
function fn(obj, arr, index,self) {
if (obj.hasOwnProperty(‘children’)&&obj[‘children’].length>0) {
for (let one of obj.children) {
if (one.name != ‘index’ && one.name == arr[index]) {
self.BreadcrumbItem.push({‘title’: one.meta.title, ‘path’: one.path})
return one.hasOwnProperty(‘children’)&&one[‘children’].length>0?fn(one,arr,index+1,self):false
}
}
}
}
for(let one of this.$router.options.routes){
if(one.hasOwnProperty(‘name’)&&one.name == list[1]){
this.BreadcrumbItem.push({‘title’: one.meta.title, ‘path’: one.path})
fn(one,list,2,this)
}
}
}
这个是就是本文的重点,其实也简单,就是递归了下路径名重新组装了下数据给面包屑传过去
watch: {
‘$route'(to, from) {
this.eve_breadcrumbItem_change()
}
},
…
mounted() {
this.eve_breadcrumbItem_change()
},
使用也简单,无非 watch 检测下路径变化,避免刷新页面时没路径,在 mounted 里再调用一下。
结果
结果嘛,自然就解决问题。不过路径的配置可能会和大家的不同,我喜欢在分组下默认弄个 index 路径,我觉得这样结构比较好,这里大家注意下。如果对你有帮助的话,帮忙点个赞或者收藏下啦!感谢感谢