记录vueRouter 使用中遇到的问题
- 多级嵌套路由渲染不出页面
const routerList = [
{ path: '/register', component: register ,name:'register'},
{ path: '/', redirect: '/login' },
{ path: '/1234ttest', redirect: '/test11' },
{ path: '/test',
component: login ,
children:[
{
path: '/test1',
component: login,
children:[
{
path: '/test11',
component: test1,
}
]
},
{
path: '/test2',
component: test2
}
]
}
]
VueRouter 的两个主要标签 ,,要想页面渲染出来,必须保证当前路由层级有router-view 的出口。
解决思路:
1 、路由扁平化,将多级路由全部变成一级路由。
[ { path: '/register', component: register ,name:'register'},
{ path: '/', redirect: '/login' },
{ path: '/1234ttest', redirect: '/test11' },
{ path: '/test', component: login },
{
path: '/test11',
component: test1,
},
{
path: '/test2',
component: test2
}]
2、保证每一个子级的父级都是一个router-view 。
比如login 组件
<template id="login">
<div>
<h1 style="text-align:center;">login111</h1>
<div style="width: 100%;height: 500px;background: hotpink;border: 1px solid #000;">
<router-view></router-view>
</div>
</div>
</template>
或者直接 componet: {render: (e) => e(“router-view”)};
2、多级路由的地址拼接
在VueRouter中 / 代表根路径
1、子路由地址一级级详细拼接 那么除了最顶级父级外 其他嵌套子项都不能加 /
2、直接显示子路由地址,不拼接父级地址,需要在每一个子项前加一个/
const testRoute =
[ { path: '/test',
component: login ,
children:[
{
path: '/test1',
component: login,
children:[
{
path: '/test11',
component: test1,
}
]
}
]
}];
//匹配test1 跳转地址就是 /test11
const testRoute =
[ { path: '/test',
component: login ,
children:[
{
path: 'test1',
component: login,
children:[
{
path: 'test11',
component: test1,
}
]
}
]
}];
//匹配test1 跳转地址就是 /test/test1/test11
3、多级嵌套router-view keep-alive 缓存
在有多级嵌套的情况下,keep-alive 可能不能正确的缓存到我们的目标组件,最有效的解决方式就是,路由扁平化,转化为一级路由。通过css 实现不同的布局方式。
这边顶部菜单为主菜单,侧边菜单,只在有些特殊菜单才会出现。这边的实现逻辑就是页面都放在主页面APPMAIN中,监控这个route 当发现是特殊菜单那的时候渲染侧边菜单。