解决方案,我使用了activated和 beforeRouteLeave两个生命周期配合使用
注意:要先把数据恢复默认值
// 缓存处理
activated(){
if(this.isKeepAlive){
this.seq_uuid = ''
this.adcode = ''
this.amount = ''
this.name = ''
this.term = {}
this.applyField = []
this.seq_uuid = this.$route.query.seq_uuid;
this.adcode = this.$route.query.adcode;
this.type_show = this.$route.query.type_show;
this.getQueryApplyField(this.$route.query.seq_uuid);
}
},
// 缓存处理
beforeRouteLeave (to, from, next) {
if(to.meta.isProtocol && to.name == 'loginProtocolList'){
this.isKeepAlive = false;
}
if(to.name == 'LoanInfo'){
this.isKeepAlive = true;
}
if(to.name == 'SubmitSuccess'){
this.isKeepAlive = true;
}
next();
},
缓存的页面 created 会执行只有一次,activated每次都会执行 , created 里面做 第一次 isFirstEnter = true(由于页面被缓存,所以一直生效),之后再activated 里面做判断 只有 “不是返回回来的” 和 “第一次进来的” 就刷新数据, 并且要在下面 都设为false, 以免缓存各标识不对,在进入 “列表页” 时,通过router钩子函数 beforeRouteEnter做判断,详情页过来的设 isBack 为true,即不刷新页面