页面首次加载,加载了一个包含<router-view/>标签的页面,且被keepAlive包裹,如下
//index.vue ,路由为/index
<div>刷新按钮</div>
<div>打开a页面</div>
<keep-alive>
<router-view/>
</keep-alive>
此时<router-view>是没有渲染内容的,因为路由只匹配到当前页面层,但是在后续操作中,想通过刷新按钮,使得keepAlive包裹下的所有页面能手动刷新,所以我给router-view增加了key。
出现了一个新的问题,当想要打开a页面(路由/index/a)的时候,通过$router.push()方法去跳转时,总是无法渲染a页面,而再去点击菜单其他选项跳转页面的时候,是可以成功的。只有第一个页面总是无法渲染成功,请问是什么原因呢?
当去掉KeepAlive的时候,页面能够成功渲染。
我的路由配置
{
path: '/index',
name: 'index',
component:() => import('@/pages/index/index'),
children:[
{
path: "a",
name: "a",
component: () => import('@/pages/index/a')
}
......
]
},
KeepAlive 和 key 属性的结合使用导致了 RouterView 的缓存行为与路由更新的不匹配。在首次加载 /index 页面时,KeepAlive 包裹的 RouterView 没有渲染内容(因为没有匹配到子路由),而当你通过 $router.push() 跳转到 /index/a 时,KeepAlive 的缓存机制可能无法正确处理子路由的变化
加个key应该就好了吧