1.改成可以走缓存的
<keep-alive>
<router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>
2.详情页返回的要做标记
//返回时记录是从详情返回的
actGoBack(){
this.$route.meta.keepAlive = 'detailBack'; //详情回去的要记录一下,为了保留当前页码
this.$router.go(-1);
},
3.路由守卫设置 keepAlive
router.beforeEach((to, from, next) => {
// 路由全局前置守卫
if (to.path !== '/login' && !Cookies.get('X-Access-Token')) {
// 未登录
next('/login')
} else if (to.meta && to.params && !auth(to.meta.auth, to.params)) {
// 权限不足
next(false)
} else {
keepAlive(to,from)
next()
}
})
function keepAlive(to,from){
if(from.meta.keepAlive === 'detailBack'){
to.meta.keepAlive = true;
}else{
to.meta.keepAlive = false;
}
}
4.想要页码不变,当前页的数据更新
activated(){
this.getDataList(); //保持在当前页请求数据
},
两个微妙的点
都用keepAlive字段 1.详情-列表 后再进详情会进keepAlive的else
详情页赋值为detailBack而不是true 是为了不出现from是true导致to是true导致下一个from是true直到所有的路由都为true
刚好 必须必须为true时才才进if