vue keep-alive 缓存问题最终解决方案

解决方案,我使用了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,即不刷新页面

你可能感兴趣的:(vue)