Vue项目中,默认的情况,如果某个页面跳转到了下一页,在下页面返回后($router.go(-1)),上一个页面总是会自动刷新(进入created方法),导致上页面的状态就没有了,这样的方式往往不是我们想要的!
问题解决
可以使用<keep-alive></keep-alive>来解决这个问题,它是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。
在 App.vue里面(组件最开始的地方),有如下代码:
<template> <div id="app"> <router-view></router-view> </div> </template>
改成如下:
<template> <div id="app"> <!-- 缓存的页面,缓存$route.meta.keepAlive为true的组件 --> <keep-alive> <router-view v-if="$route.meta.keepAlive"></router-view> </keep-alive> <!-- 不缓存的页面,不缓存$route.meta.keepAlive为false 或者没有这个 meta 的组件 --> <router-view v-if="!$route.meta.keepAlive"></router-view> </div> </template>
这样,我们只要在路由的设置里,加上 meta 就可以让这个页面在跳到其他页面返回后,保持状态了:
{ path: '/xxlist', name: 'MyList', title: '某某列表页面', component: () => import('@/views/MyList.vue'), meta: { keepAlive: true // 下一页返回后,不要刷新,不触发created } }
文章评论