当前位置: 首页 > article >正文

vue使用keep-alive后从部分页面进入不缓存

需求:
1:当前有页面A-B-C三个板块;
2:从页面C返回页面B时,B页面数据之前数据不会被清空(keep-alive),且C页面携带到B页面的数据缓存(event-bus/vuex);
3:从A-页面进入B页面时,B页面为初始化状态。
实现:
1:借用路由钩子函数,在进入B页面时,对当前页面进行兼容处理;

修改router路由中配置项

配置meta属性和isBack标识,判断当前页面是从C页面返回还是从其他页面进入,具体配置如下:

{
    path: '/B',
    name: 'B',
    component: require('@/page/index.vue'),
    meta: {
        keepAlive: true, //当前页面是否缓存,搭配keep-alive使用
        isBack: false // 判断当前页面是从C页面返回还是从其他页面进入,默认从A页面进入
    }
},

判断当前页面是否需要缓存的页面

再B页面判断当前页面跳转方式,通过beforeRouteEnter(to, from, next),来判断路由是从哪里来跳转的,如果是从C跳转的,则将当前路由对象的meta.isBack设置为true,否则设为false。具体实现如下:

beforeRouteEnter(to, from, next) {
    if (from.path == "/C") {
        to.meta.isBack = true; 
    } else {
        to.meta.isBack = false;
    }
    next();
},

不需要缓存页面,重置B页面数据

从非C页面进入B页面时,都应重置当前页面数据,所以需要在页面加载之前(即activated),将之前获取到的数据以及查询条件清空。
activated()与deactivated()是两个生命周期钩子(生命周期函数)。
activated()与deactivated()是路由组件所独有的两个生命周期钩子,用于捕获路由组件的激活状态。
activated路由组件被激活时触发。
deactivated路由组件失活时触发。

activated() {
    let that = this;
    // 第一次和非C页面进入B页面时 isBack都为false,即需要重置数据
    if (!this.route.meta.isBack) {
        // 重置数据操作
       
    }
    this.route.meta.isBack = false;
},


http://www.kler.cn/a/3012.html

相关文章:

  • 如何用函数去计算x年x月x日是(C#)
  • 134.力扣刷题--加油站--滑动窗口
  • 如何将DeepSeek部署到本地电脑
  • 新版231普通阿里滑块 自动化和逆向实现 分析
  • 【ESP32】ESP-IDF开发 | WiFi开发 | TCP传输控制协议 + TCP服务器和客户端例程
  • Java 大视界 -- Java 大数据在量子通信安全中的应用探索(69)
  • Linux命令scp用法
  • JVM笔记(九)选择合适的垃圾收集器
  • leetcode 删除有序数组中的重复项
  • 二分查找——我欲修仙(功法篇)
  • 网络安全法
  • Dijkstra 算法
  • 新版logcat最全使用指南
  • C语言--动态内存管理1
  • 【栈和队列OJ题】有效的括号用队列实现栈用栈实现队列设计循环队列
  • 若依微服务(ruoyi-cloud)保姆版容器编排运行
  • 静态版通讯录——“C”
  • JAVA框架知识整理
  • 并发编程(六)—AbstractExecutorService源码分析
  • Karl Guttag:论相机对焦技术在AR/VR中的沿用
  • 电商(二)网关微服务搭建
  • PyTorch 之 基于经典网络架构训练图像分类模型
  • 【Python练习】序列结构
  • 当下的网络安全行业前景到底怎么样?还能否入行?
  • libjson-c使用介绍
  • 统计软件与数据分析Lesson5---时间序列分析入门