从此告别表单数据丢失!vue教你缓存当前页面信息(keep-alive)

Vue-ElementUI实现前端多选框切换分页选择保留之前选的数据,分页选择、回显功能 Vue-ElementUI实现前端页面开发遇到切换分页时,之前页面选的数据不会保存以及选择的数据如何回显的问题。 阅读详情
AI摘要

本文介绍了如何使用Vue的内置组件keep-alive来缓存表单内容,避免用户在页面跳转后丢失填写的信息。通过理解keep-alive的概念、作用、原理和参数,以及在实际项目中的应用,如设置meta属性和使用生命周期钩子,可以显著提升用户体验。通过示例代码展示在App.vue和路由配置中的实现细节,确保表单数据在页面间切换时得到保留。

前言

在我们日常的开发工作中,经常会遇到这样的情况:用户填写了一个表单,但是在跳转到其他页面后,再次回到该页面时,之前填写的内容消失了。这不仅让用户感到不便,也让开发人员头疼不已。那么,有没有什么好的解决方案呢?答案是肯定的!本篇文章将介绍如何利用 vue 技术实现表单内容的缓存,让用户填写表单变得更加顺畅、愉悦。

未优化前

在这里插入图片描述

概念

1. 什么是 keep-alive?

在使用 keep-alive 之前我们首先要知道什么是 keep-alive ? keep-alive 是 vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。它自身不会渲染成一个 DOM 元素,也不会出现在父组件链中。


2. keep-alive 的作用?

组件切换的过程中将状态保留在内存中,防止重复渲染 DOM,减少加载时间及性能消耗,提高用户体验性。


3. keep-alive 的原理?

在 created 生命周期函数调用时将需要缓存的 VNode 节点保存在 this.cache 中,在页面渲染时,如果 VNode 的 name 符合缓存条件(可以用 include 以及 exclude 控制),则会从 this.cache 中取出之前缓存的 VNode 实例进行渲染。


4. keep-alive 有哪些参数?

keep-alive 可以接收 3 个属性做为参数进行匹配对应的组件进行缓存:

参数描述
include定义缓存白名单。可以是字符串,数组,以及正则表达式,只有匹配的组件会被缓存
exclude定义缓存黑名单。可以是字符串,数组,以及正则表达式,任何匹配的组件都不会被缓存
max缓存组件上限。类型为字符串或者数字,可以控制缓存组件的个数

5. keep-alive 的生命周期函数?

只有组件被 keep-alive 包裹时,这两个生命周期函数才会被调用,如果作为正常组件使用,是不会被调用的,以及在 2.1.0 版本之后,使用 exclude 排除之后,就算被包裹在 keep-alive 中,这两个钩子函数依然不会被调用。另外,在服务端渲染时,此钩子函数也不会被调用。

钩子函数描述
activated在 keep-alive 组件激活时调用,该钩子函数在服务器端渲染期间不被调用。
deactivated在 keep-alive 组件停用时调用,该钩子在服务器端渲染期间不被调用。

看到这里,相信你对 keep-alive 已经有了初步的认识,那具体在项目中要怎么使用呢?下面进入实战操作。


使用

1. 在 App.vue 文件中添加 keep-alive 标签

App.vue

<template>
  <div id="app">
    <keep-alive>
      <router-view v-if="$route.meta.keepAlive" />
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive" />
  </div>
</template>

2. 在路由文件中添加 meta (未跳转之前的页面)

router/index.js

{
	path: '/as',
	name: 'as',
	component: () => import('@/views/as'),
	meta: {
		keepAlive: true
	}
},

3. 在跳转的新页面中添加 beforeRouteLeave

views/ass.vue

methods: {
  beforeRouteLeave(to, from, next) {
    to.meta.keepAlive = true;
    next(0);
  },
},

3.1 生命周期的执行顺序

1.不使用 keep-alive 的情况:

beforeRouteEnter --> created --> mounted --> destroyed

2.使用 keep-alive 的情况:

beforeRouteEnter --> created --> mounted --> activated --> deactivated

3.使用 keep-alive,并且再次进入了缓存页面的情况:

beforeRouteEnter --> activated --> deactivated

3.2 让我们一起来看看优化后的效果

在这里插入图片描述


vue3.0 keep-alive 路由跳转之后保留当前页面数据不变动 需求: 1:页面一数据由接口返回,修改部分数据, 2:数据仅前端页面调整,暂未提交修改数据库。 3:页面一跳转页面二,再由页面二返回页面一 4:页面一数据仍为修改后的数据 实现: 1:借用方式:keep-alive 2:keep-alive是vue中的一个内置组件,主要是将组建缓存到内存中,避免切换路由的时候页面刷新从而导致dom的重新渲染 3:vue3keep-alive使用vue2的写法,切换路由后当前页面数据依旧改变 一:在vue.app中添加keep-alive标签(此处与vue2不同)。 &l. 阅读详情

相关推荐

使用vue中的keep-alive缓存表单数据

一、问题提出 在表单页面填写信息,提交进入支付页面,从支付页面路由回退到表单页面,数据全部清空 二、期望效果 从支付页面路由回退到表单页面,数据保留,不被清空 三、解决方案: 使用keep-alive缓存表单数据 ① 将需要缓存的组件,在路由规则中的meta添加keepAlive属性为true,如下: { path:'/IDCard', name:'IDCard', component:resolve => require(['@/views/proofLoss/loss/IDCard

cxy980626的博客 1708

vue单页面实现路由跳转后保留原页面数据

在设置keep-alive缓存的组件中,首次进入组件,会一次调用组件的钩子函数:created --> mounted -->activated 再次进入时,只触发activated钩子函数。2.在路由选项中,配置meta属性,keepAlive为true即为需要缓存的组件,同时设置isBack属性,用来标示页面是否是从详情页面返回的。该步骤可以让一个组件里的值传到另一个组件里,不需要父子关系。页面的缓存,需要用到vue的内置组件keep-alive,来缓存列表页面,同时配合路由选项来更改页面的数据。

weixin_51958039的博客 1万+

vue页面缓存解决方案

keep-alive、页面缓存

GengJL 4736

vue实现页面缓存

在开发中经常有需要前端做页面缓存的需求,vue里提供了keep-alive组件用来缓存状态;

weixin_49428989的博客 3477

闲鱼x-sign、x-mini-wua、x-umt三字段协同验证机制解析

在移动客户端风控体系中,设备标识与行为签名是保障接口安全的核心技术。x-sign并非传统时间戳+密钥的静态签名,而是融合设备特征、运行时状态与服务端动态因子的多阶段位运算结果;x-mini-wua作为小程序轻量水印,依赖主App注入的短时效sessionKey与截断时间戳;x-umt则通过设备硬件与网络环境联合编码实现强绑定。三者构成‘设备—环境—行为’三位一体的交叉验证链路,广泛应用于电商API防护、二手平台数据采集及自动化运营等场景。本文基于Android/iOS真机逆向与Frida动态分析,揭示其生成

weixin_30457551的博客 422

LS-DYNA中的流固耦合

在LS-DYNA中对流固耦合问题的求解提供了两种方法,ALE流固耦合和基于ICFD的流固耦合。本文将对两种方法的各自特点进行分析。 ALE方法的流固耦合 适用范围 ALE求解器主要用于层流。ALE求解器也不是完全的NS求解器,因此不考虑边界层的影响,比如阻力。流体粘性效应仅通过材料模型获得,也就是*mat_null的MU。ale求解器是为了求解高压高速度梯度的短时问题而开发的。该求解器并不适用于求解低压力梯度问题比如声学,也不适用于长时间问题(秒的尺度甚至更长)。时间的限制是显式时...

m0_69812055的博客 8553

Vue3表单页面利用keep-alive缓存数据的一种思路

Vue3使用keep-alive动态清除缓存

parade岁月的博客 1493

Neo4j 智能供应链应用源代码简析

本文简析Neo4j智能供应链应用的源代码,让你也可以快速开发自己的供应链应用。

Neo4j 开发者博客 1679

vue3中keep-alive和vue-router的结合使用

vue3中keep-alive和vue-router的结合使用前言代码一、为何要使用keep-alive?二、vue2中使用keep-alive将“router-view”组件包含于“keep-alive”即可三、vue3中使用keep-alive四、keep-alive属性“include,exclude”的使用。 前言 keep-alive:Vue内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。 router-view:vue-router内置组件, 如果直接包含在keep-alive里

weixin_53068161的博客 1万+

SpringBoot3项目实战:5分钟搞定Knife4j接口文档配置(含中文版设置)

本文详细介绍了在SpringBoot3项目中快速整合Knife4j接口文档工具的实战教程。内容涵盖核心依赖选择、基础配置、中文界面设置、API信息深度定制以及生产环境安全策略,帮助开发者高效构建专业、可交互的API文档门户,提升团队协作效率。

weixin_29204121的博客 256

D触发器版图设计的艺术:最小化面积与最大化性能的平衡之道

本文探讨了D触发器版图设计中如何平衡最小化面积与最大化性能的核心挑战。通过分析晶体管布局、互联优化、时钟分布等关键策略,结合先进制程下的功耗与信号完整性考量,为数字IC工程师提供了从基础优化到制造验证的实用解决方案,助力实现高性能、低面积的芯片设计。

aa123的博客 909

VUE keep-alive与非keep-alive 手动刷新页面

由于需求需要有时候需要刷新vue的某个页面,即手动再触发vue组件的钩子方法(created,mounted等),但是会有问题 1.vue是根据组件名来加载页面的,如下 组件没改变,人工再调用 this.$router.push(),也不会触发刷新。 2.this.$router.go(0)可行,但是页面会变白,而且不支持动态路由,即原本在某个入口添加进来的路由由于并没有再次执行该添加路由的方法...

hardly555的博客 7887

深入解析.Net中SM2与sm-crypto的跨平台加解密实践

本文深入探讨了在.Net平台与前端sm-crypto库之间实现SM2国密算法跨平台加解密的实践方案。针对对接中常见的密钥格式、密文拼接顺序(C1C3C2与C1C2C3)等核心难点,提供了基于BouncyCastle的完整工具类实现、前后端联调示例及问题排查指南,旨在帮助开发者构建安全、兼容的数据加密通道。

weixin_29322855的博客 368

【vuejs】keep-alive组件的原理讲解和使用讲解

Vue.js 框架中的组件是一个用于缓存组件实例的内置组件,它使得组件在不活动时保持其状态,从而提高应用的性能和用户体验。当使用动态组件切换视图时,不在显示的组件实例会被销毁并重新创建,这会导致状态丢失。而可以避免这种情况,它缓存了这些组件实例,使得它们在重新激活时能够保持之前的状态。

工作的日常记录和平凡的生活分享 2077

YOLOv13添加DRB模块map暴涨12.33!准确率提升8.56!召回率提升15.66

本文介绍了在YOLOv13模型中添加DRB模块的改进方法。实验结果显示,添加DRB模块后模型性能显著提升,mAP暴涨12.33%,准确率提升8.56%。文章详细说明了移植过程,包括创建yolov13-DRB.yaml配置文件、修改tasks.py和__init__.py文件,以及引入UniRepLKNet模块的具体实现。其中重点描述了GRNwithNHWC、NCHWtoNHWC等核心组件的实现细节,并提供了完整的模型结构配置代码。这些改进使得YOLOv13模型在保持原有架构优势的同时,获得了更强大的特征提取

FJN110的博客 2818

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Vue3动态路由复用组件:基于keep-alive的智能缓存策略实践

本文深入探讨了在Vue3项目中,当多个动态路由复用同一组件时,如何解决keep-alive缓存失效导致页面状态丢失的问题。通过动态生成具有唯一标识的包装组件,并配合路由元信息进行智能缓存管理,实现了组件状态的独立保存与恢复,有效提升了后台管理系统的用户体验。

wdx0123456的博客 844

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【vue】keep-alive的用法及详解

只有组件被 keep-alive 包裹时,这两个生命周期函数才会被调用,如果作为正常组件使用,是不会被调用的,以及在 2.1.0 版本之后,包含在 keep-alive 中,但符合 exclude ,不会调用activated和 deactivated这两个函数钩子!keep-alive组件,只要将子组件嵌套在这里面就可以实现组件的缓存,当页面返回时数据不会丢失,实现了我们常见的历史页面不刷新的效果。keep-alive组件是vue2.0提供的一个缓存组件,在组件切换过程中把切换出去的组件保留在。

weixin_45291798的博客 3891

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【vue】聊一聊嵌套路由使用keep-alive缓存的实现

大家应该都写过类似布局的页面,一个顶部导航、一个侧边菜单和一个主要内容区域。其中只有主要内容区域是变化。在这个基础上实现缓存大家应该都有经历过。那多层嵌套路由怎么实现呢?

拖孩 2401

Vue2中的keep-alive:组件状态缓存与性能优化实战指南

在Vue.js开发中,组件频繁切换时如何保留状态、避免重复渲染是常见的性能瓶颈。Vue2提供了一个强大的内置组件keep-alive,它能够通过缓存组件实例来解决这一问题。本文将从原理、用法到实战场景,深入解析keep-alive的核心功能及最佳实践。

2301_81137804的博客 2613

Vue3路由缓存避坑指南:如何用keep-alive和路由元信息优化你的SPA性能

本文深入探讨Vue3路由缓存的优化策略,重点解析keep-alive与路由元信息的动态控制机制。通过实战案例展示如何避免内存泄漏、状态错乱等问题,提供包括缓存污染排查、内存泄漏防护、数据更新策略在内的高效解决方案,帮助开发者显著提升SPA应用性能。

xray4的博客 842

Vue 通过keep-alive缓存Tab页面

需求 Vue单页应用页面中制作仿浏览器tab页切换的功能 新页面打开并建立tab,用户通过点击tab来切换打开的页面,这些页面需要缓存,防止用户切换页面导致的查询结果或表单内容丢失等情况。

japlus的博客 2274

解决vue项目中keep-alive不能缓存多层级路由问题

解决vue项目中keep-alive不能缓存多层级路由 看了很多文档,都是把嵌套多级路由简化(keep-alive满足二级/一级菜单缓存),菜单数据和路有数据分离开,这种方案解决起来相对复杂一些,下面的方法相对简单一些,我是看了这篇文章,结合自己的项目稍作修改.下边也有自己遇到的问题及解决方法. 需求介绍 自己项目的图片不便粘贴,我还是引用原博主的图片 项目中使用的是3级路由,要实现三级菜单来回跳转保存状态(并且跨二级菜单间的三级菜单页面切换也需要保存状态) 咱们首先想到的是使用keep-alive标签来

weixin_46995731的博客 8872

vue项目keep-alive动态缓存页面的几种方式

keep-alive 的使用 业务中经常遇到一种需求 , 项目中使用了tab_bar管理打开的页面 , 切换过程中希望能缓存下来页面状态 , 关闭标签页 , 再从左侧菜单栏打开页面会重新加载 . 以下是几种常见的解决方案 , 以及优缺点和局限性 keep-alive的官方文档: https://cn.vuejs.org/v2/api/#keep-alive 1: 使用router-view 配合 v-if : 适用 : 原本的router关联的组件存在匿名组件(没有设置name属性) 优点 : 改造成本低

zhangyun1107892254的博客 3043

Vue keep-alive

一个后台管理系统中,根据用户选择切换不同的管理模块(例如:用户管理、订单管理),每个模块的页面状态和数据都可以被缓存。:电商网站的商品浏览页,当用户从商品页切换到购物车页面,再切换回来时,商品页的滚动位置和过滤条件可以被保留。:在一个带分页的商品列表中,用户选择了某页,然后切换到其他页面,返回时会自动恢复到之前的页码和筛选条件。:一个多步骤的表单,用户填写完第一个步骤后切换到其他页面,再返回时,之前的填写内容不丢失。:当用户浏览一个长列表时,切换到其他页面再切换回来,列表的滚动位置会被保留。

lf_1234的博客 661

【什么是 Keep-Alive?深入理解 Vue.js 的 Keep-Alive:组件状态缓存方案】

Keep-Alive 是 Vue.js 中一个强大的组件缓存工具,通过合理使用可以显著提升应用性能和用户体验。使用包裹动态组件或路由视图通过includeexclude实现精细化缓存控制理解activated和生命周期钩子结合业务场景合理设计缓存策略注意内存管理和数据更新时机掌握 Keep-Alive 的使用,能够让你的 Vue 等框架应用更加流畅和高效。

weiqsctj的博客 1665
上一篇: JavaScript日期库之date-fn.js
下一篇: vue+element,让下拉框选择渲染数据变得更加简单
水星记_
水星记_ 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域
博客等级 码龄6年 13万+粉丝 212原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水星记_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值