VUE工程的keep-alive缓存机制(全部缓存、部分缓存、定向缓存)

2023-11-10

目录

 

应用场景

解决思路

一、缓存所有页面

二、缓存部分页面

三、页面缓存了,有的功能需要再进入后,仍然重新执行的怎么办

四、执行前进刷新,后退时候缓存

五、页面B进入页面A需要缓存,页面C进入页面A不需要缓存



 

应用场景

1、vue工程,很多时候希望页面不管怎么跳转,返回时候,页面都能保持之前的操作状态,

2、页面跳转不用每次都执行mounted,特别很多请求数据时候,都是从mounted发起,不需要每次跳转都执行一次请求数据。

这就需要使用vue的keep-alive缓存。

解决思路

一、缓存所有页面

如果需要缓存所有页面,就在使用router-view中地方(一般都是app.vue,但也不绝对是,就是控制要缓存的页面router跳转的上一级直接router-view的地方)外围包上<keep-alive></keep-alive>标签

<template>
      <div id="app">
        <keep-alive >
          <router-view></router-view>
        </keep-alive>
      </div>
 </template>

二、缓存部分页面

缓存部分页面,一般有两种方式:

(1)使用router.meta属性

router-view文件中:(app.vue)

<template>
      <div id="app">
        <keep-alive >
          <router-view v-if="$route.meta.keepAlive"></router-view>   //放需要缓存的组件
        </keep-alive>
        <router-view v-if="!$route.meta.keepAlive"></router-view>  //放不需要缓存的组件
      </div>
    </template>

路由配置文件router.js文件中,给需要缓存的路由加上meta属性,并设置值。

{
      path: '/usermanage',
      name: 'usermanage',
      meta: {
        keepAlive: true, //该字段表示该页面需要缓存
      },
      component: resolve => require(['@/views/userManage/userManage'], resolve) // 路由懒加载
    },

(2)使用vue-router 2.X的include、exclude两个属性,针对性的缓存相应的组件

include属性表示只有name属性为a,b的组件会被缓存,(注意是组件的名字,不是路由的名字)其它组件不会被缓存exclude属性表示除了name属性为a,b的组件不会被缓存,其它组件都会被缓存

在使用router-view标签的vue文件中修改:

<keep-alive include="a,b">
   <router-view></router-view>
</keep-alive>

注意:上面代码中的a,b是需要缓存的组件中的的name值(a.vue中的name值),不是路由的name值。

三、页面缓存了,有的功能需要再进入后,仍然重新执行的怎么办

当引入keep-alive的时候,页面第一次进入钩子的触发顺序created-> mounted-> activated,退出时触发deactivated。再次进入(前进或者后退)时,只触发activated

事件挂载的方法等,只执行一次的放在 mounted 中;组件每次进去执行的方法放在 activated 中, activated 中的不管是否需要缓存多会执行。

注意:当组件在 <keep-alive> 内被切换时,它的 activated 和 deactivated 这两个生命周期钩子函数将会被对应执行。

activated:进入页面时候执行

activated(){

},

deactivated:退出页面时候执行

deactivated(){

},

四、执行前进刷新,后退时候缓存

参照五、需要在加一个变量,确定从哪里到哪里是前进,从哪里到哪里是后退

(1)router.js中,A的路由设置

{
      path: '/usermanage',
      name: 'usermanage',
      meta: {
        keepAlive: true, //该字段表示该页面需要缓存
        isBack: false, //用于判断上一个页面是哪个
        title: '人员管理'
      },
      component: resolve => require(['@/views/userManage/userManage'], resolve) // 路由懒加载
    },

(2)其他页面中,,利用路由钩子函数,修改isback这个值,

五、页面B进入页面A需要缓存,页面C进入页面A不需要缓存

思路:在每个路由的路由钩子函数beforeRouteLeave(to, from, next)钩子中设置 to.meta.keepAlive的true或者false值。

具体流程

(1)router.js中,A的路由设置:

{
    path: '/',
    name: 'A',
    component: A,
    meta: {
        keepAlive: true // 需要被缓存
    }
}

(2)C.vue文件中:

export default {
    data() {
        return {};
    },
    methods: {},
    beforeRouteLeave(to, from, next) {
        // 设置下一个路由的 meta
        if(from.name=="C的路由名字"){
            to.meta.keepAlive = false; // C 跳转到 A 时让 A 不缓存,即刷新,to表示要跳转的A
        }
        next();
    }
};

(3)B.vue

export default {
    data() {
        return {};
    },
    methods: {},
    beforeRouteLeave(to, from, next) {
        // 设置下一个路由的 meta
        if(from.name=="B的路由名字"){
            to.meta.keepAlive = true; // C 跳转到 A 时让 A 不缓存,即刷新,to表示要跳转的A
        }
        next();
    }
};

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VUE工程的keep-alive缓存机制(全部缓存、部分缓存、定向缓存) 的相关文章

  • HTTP keep-alive和TCP keepalive的区别,你了解吗?

    1 从文中找出我的IP 2 http请求中是客服端还是服务端主动关闭的tcp连接 xff1f 请阅读到最后的彩蛋部分 HTTP和TCP都是老生常谈的知识点 xff0c 本文不进行铺开赘述 我们可能在HTTP和TCP中都听说 长连接 的说法
  • vue中不同路由共用同一个组件,缓存数据。不同路由第一次进入走加载,二次缓存

    背景 后端根据不同路由返回不同数据 使用一个组件去渲染页面 需求 一 每次新路由进入的同一个组件都要走生命周期 获取后端数据 二 第二次点击需要缓存数据 希望之前输入的数据还在 难点说明 1 由于vue设计时 同一个组件二次进入是不会再次走
  • Azure Web Api - 每 4 分钟和 30 分钟等待一次 Sql 连接

    在 ApiController 上的请求中 我跟踪等待 Sql 连接打开的持续时间 await t TrackDependencyAsync async gt await sqlConnection OpenAsync return tru
  • PHP、nodeJS 和会话

    我有一个传递 php 文件的经典 apache 服务器 以及一个用于该 PHP 网站上的实时事件管理的 nodeJS 服务器 带有 socket io 但没有 express connect 我有时需要对连接到nodeJS服务器的客户端进行
  • Windows TCP 套接字默认启用 SO_KEEPALIVE 吗?

    我在 TCP 套接字方面遇到了一个奇怪的错误 看起来SO KEEPALIVE默认情况下在所有套接字上启用 我编写了一个简短的测试用例来创建套接字并连接到服务器 连接后 我立即检查SO KEEPALIVE with getsockopt 该值
  • 如果网络中断,socket 会发生什么情况

    假设一个简单的网络模型 A 已成功创建到 B 的 TCP 连接 并且它们正在这样相互通信 A lt gt B 我知道如果A上的程序死掉 例如核心转储 这将导致向B发送RST数据包 因此B的任何读取尝试都会导致EOF 而B的任何写入尝试都会导
  • 角度 6 ng-空闲

    我有一个运行良好的 Angular 项目 我正在实施 NG IDLE 和 KeepAlive 以便保持会话新鲜并在 API 会话过期之前注销用户 我的问题是 ng idle 也在登录页面上运行 这显然不是必需的 因为当它超时时 它会将用户带
  • 通过 Python 请求重用 Django 中的连接

    正确的重复利用方式是怎样的Python 请求Django 中跨多个 HTTP 请求的连接 这就是我目前正在做的事情 import requests def do request data return requests get http f
  • 如何在多进程池中回收连接,为来自 python 中的单个 requests.Session 对象的请求提供服务?

    下面是针对该问题简化的完整代码 ids to check返回 id 列表 在我的测试中 我使用了 13 个随机字符串的列表 usr bin env python3 import time from multiprocessing dummy
  • Python urllib3:一段时间后关闭空闲连接

    有没有办法告诉Python urllib3在一段时间后不要重用空闲连接 而是关闭它们 寻找https urllib3 readthedocs io en latest reference index html module urllib3
  • NSURLConnection 和保持活动状态

    我的客户端应用程序中有一个使用 NSURLConnection 的小错误 我已经追踪到一个意外的连接保持活动 这似乎使网络服务器感到困惑 可能是服务器端的错误 解决方法是在某个时刻强制关闭所有未完成的连接 我可以用 NSURLConnect
  • 如何使 HA 代理保持活动状态

    在我的环境中 我有 2 个 Web 服务器 Apache 的 haproxy 负载平衡 这是我的 HA 代理配置 global log 127 0 0 1 local2 chroot var lib haproxy pidfile var
  • 如何保持 RTSP 会话存活?

    我尝试在 Google Nexus S 2 3 7 HTC Desire 2 3 3 和 Samsung Galaxy 3 2 上进行流式传输 只有 Google Nexus 存在 RTSP 会话超时问题 我阅读了一些关于这个问题的帖子 似
  • 如何使 Flask/保持 Ajax HTTP 连接处于活动状态?

    我有一个 jQuery Ajax 调用 如下所示 tags keyup function event ajax url terms type POST contentType application json data JSON strin
  • WebSockets ping/pong,为什么不 TCP keepalive?

    WebSockets有选择权 https www rfc editor org rfc rfc6455 section 5 5 2发送 ping 到另一端 另一端应该用 pong 响应 收到 Ping 帧后 端点必须发送 Pong 帧 响应
  • Express.js 关闭响应

    有没有办法关闭回复 我可以用res end 但它实际上并没有关闭套接字 我想要实现的目标 我正在编写一个与网络交互的Java程序 并且我正在为此编写一个NodeJS服务器 Java代码 String line while line in r
  • 使用 php 和 jquery 的简单彗星示例

    谁能给我一个使用 PHP 的彗星技术的简单好例子 我只需要一个使用持久 HTTP 连接或类似连接的示例 我不想使用轮询技术 因为我已经设置了类似的东西 并且不仅难以使用和管理它的大量资源 另外我使用的是 IIS7 而不是 Apache 一个
  • 服务器响应中的“连接:保持活动状态”

    我正在尝试建立从 Silverlight 应用程序到 Apache 服务器托管的 PHP 页面的 HTTP 持久连接 即无需为每个 HTTP 请求创建新的 TCP 连接 为此 我需要网络服务器发送其 HTTP 响应 并将 Connectio
  • Paste.httpserver 并通过 HTTP/1.1 Keep-alive 减慢速度;使用 httperf 和 ab 进行测试

    我有一个基于paste httpserver 的Web 服务器作为HTTP 和WSGI 之间的适配器 当我使用 httperf 进行性能测量时 如果每次使用 num conn 启动一个新请求 我每秒可以执行超过 1 000 个请求 如果我使
  • 如何使用 python urllib 在 HTTP/1.1 中保持活力

    现在我正在这样做 Python3 urllib url someurl headers HOST somehost Connection keep alive Accept Encoding gzip deflate opener urll

随机推荐

  • 带有 OpenCV.js 的 ESP32-CAM Web 服务器:颜色识别和跟踪

    本教程介绍了使用 ESP32 摄像头网络服务器环境的 OpenCV js 和 OpenCV 工具 例如 我们将构建一个简单的 ESP32 摄像头网络服务器 其中包括对移动物体的颜色检测和跟踪 本教程绝不是对 OpenCV 可以提供给 ESP
  • 学乐高机器人还是学习少儿编程

    学乐高机器人还是学习少儿编程 对于很多的家长来说 孩子的学习一直都是他们非常关心和重视的一件事情 很多的家长在给孩子选择学习课程的时候 也是非常的耐心的 他们会给孩子选择一些能够有利于孩子成长的课程 就拿现在很多的家长想要孩子去学习机器人编
  • 生成树协议实验报告_“网络工程师培训”基础教程:OSPF协议及配置

    OSPF协议概述 OSPF 是 Open Shortest Path First 即 开放最短路由优先协议 的缩写 它是 IETF 组织开发的一个基于链路状态的自治系统内部路由协议 在IP 网络上 它通过收集和传递自治系统的链路状态来动态地
  • 牛客网Verilog刷题——VL54

    牛客网Verilog刷题 VL54 题目 答案 题目 实现一个深度为8 位宽为4bit的双端口RAM 数据全部初始化为0000 具有两组端口 分别用于读数据和写数据 读写操作可以同时进行 当读数据指示信号read en有效时 通过读地址信号
  • ffmpeg命令行map参数的使用

    介绍 理解 map参数的最好办法就是想像一下怎么去告诉ffmpeg你要从源文件中选择 拷贝哪个流到输出文件 输出文件的stream顺序取决于在命令行中 map的参数顺序 下面有一些例子 默认 默认操作 没有指定map参数 比如 ffmpeg
  • IR2104电机驱动

    目录 一 IR2104的引脚定义 二 IR2104的内部原理 三 半桥驱动原理分析 四 全桥驱动原理分析 五 电感电流回流路径的建立 六 自举电容容值的计算与自举二极管选型 七 mos管发热可能的问题 八 推荐阅读 一 IR2104的引脚定
  • R语言中如何进行PCA分析?利用ggplot和prcomp绘制基因表达量分析图

    学习笔记的主要内容是在R语言中利用ggplot2进行PCA分析和绘图 包括简单分析与操作流程 对比不同方式得到的结果差异 提供脚本代码供练习 PCA分析的原理 在处理基因差异表达数据时 有时候需要分析其中因素的影响最大 判断结果的关系 这个
  • InstructGPT:彻底改变人工智能驱动的语言模型

    目录 什么是InstructGPT 人工智能驱动的语言模型的演变 InstructGPT 模型与 GPT 3 相比如何 通过 OpenAI API 访问 InstructGPT 1 访问platform openai com并创建或登录您的
  • Linux中select poll和epoll的区别

    原文地址 http www cnblogs com bigwangdi p 3182958 html 在Linux Socket服务器短编程时 为了处理大量客户的连接请求 需要使用非阻塞I O和复用 select poll和epoll是Li
  • Node.js Modules 模块

    模块 https nodejs org docs v9 2 0 api modules html Node js has a simple module loading system In Node js files and modules
  • 美国移动网络运营商:是时候关闭 3G 了

    整理 祝涛 出品 CSDN ID CSDNnews 你的手机现在正使用什么样的网络服务呢 是4G还是5G呢 如果美国地区的用户依然停留在3G 他们可能需要在手机服务提供商关闭3G网络之前升级 以避免失去服务 美国联邦通信委员会 Federa
  • 华为OD机试 -扑克牌大小(C++ & Java & JS & Python)

    描述 扑克牌游戏大家应该都比较熟悉了 一副牌由54张组成 含3 A 2各4张 小王1张 大王1张 牌面从小到大用如下字符和字符串表示 其中 小写joker表示小王 大写JOKER表示大王 3 4 5 6 7 8 9 10 J Q K A 2
  • 联想Y9000X Opencore引导黑苹果Catalina10.15.6安装教程

    Y9000X 2020黑苹果安装教程 非商业用途 仅用于自己记录学习研究 Y9000X Opencore 安装双硬盘双系统教程 电脑配置 前期准备 安装流程 1 写入U盘镜像 2 更换EFI文件 3 磁盘分区 4 系统安装 5 将U盘中的E
  • [c++]opencv 鼠标响应函数传入外部参数(图像)问题

    参考博客 https blog csdn net my lord article details 53927865 https blog csdn net aiyueyueaoe article details 118192972 http
  • C语言开发MicroPython模块(添加module)

    MicroPython添加模块框架模式相对简单 只需要按照定义好的固定框架就可以添加模块 module 一 向固件里面添加module 1 1 编写mymodule c文件 在ports esp32文件夹下新建一个文件mymodule c
  • 域/AD域

    域 定义 域模型是针对大型网络的管理需求设计的 域就是共享用户账号 计算机账号和安全策略的计算机集合 组成 域网络的组成 一般情况下 有三种计算机 域控制器 上存储着Active Directoy 成员服务器 负责提供邮件 数据库 DHCP
  • Flink学习22:窗口的划分

    1 简介 主要有2种窗口 一个基于时间窗口 一个是基于数量窗口 时间窗口中起止时间是 左闭右开 2 时间概念 2 1 事件生成时间 EventTime 指的是数据在设备上产生的时间 这种模式下 不管数据何时到达或者顺序如何 都能得到一致的结
  • 从设备树(dtb格式数据)中解析出bootargs

    1 函数调用关系 start kernel setup arch setup machine fdt early init dt scan nodes 遍历设备树的节点 解析出重要的信息用于内核启动 of scan flat dt 解析设备
  • 四、STL容器:map

    4 map 4 1 简介 map是key value构成的集合 4 2 操作 map是键值对
  • VUE工程的keep-alive缓存机制(全部缓存、部分缓存、定向缓存)

    目录 应用场景 解决思路 一 缓存所有页面 二 缓存部分页面 三 页面缓存了 有的功能需要再进入后 仍然重新执行的怎么办 四 执行前进刷新 后退时候缓存 五 页面B进入页面A需要缓存 页面C进入页面A不需要缓存 应用场景 1 vue工程 很