vue单页面html缓存问题,vue单页面 回退页面 keeplive 缓存问题

article/2025/11/7 12:24:27

场景:项目中遇到 vue 点击回退 从A页跳到B页,缓存A页,当B页状态修改再次返回A时,A页查询条件缓存不刷新,列表刷新

A页:

4871c825d12fa6058d6fae578e17ca72.png

B页:

60e966c8421e19873c6aaf76bc2ffaea.pnghtml

解决方法:

利用keep-alive 缓存须要缓存的页面

1.在app.vue中改写router-viewvue

2.在router/index.js中添加路由元信息,设置须要缓存的页面

keepAlive:设置须要缓存的页面

isBack:经过beforeRouteEnter这个钩子函数中的from参数判断是从哪一个页面过来的,这个参数执行时,组件实例还没建立,不能在data中定义变量。因此咱们能够在路由中定义一个变量isBack,用来判断。webpack

{

path: '/trade',

name: 'trade',

component: () => import( /* webpackChunkName: "about" */ '@/views/trade.vue'),

meta: {

title:'trade.tradeTitle',

keepAlive: true, // 此组件须要被缓存

isBack:false, //用于判断上一个页面是哪一个

}

},

{

path: '/detail/:id',

name: 'detail',

component: () => import( /* webpackChunkName: "about" */ '@/views/detail.vue'),

meta: {

title:'trade.detailTitle',

keepAlive: false,

isBack:false,//用于判断上一个页面是哪一个

}

},

钩子函数的执行顺序:

不使用keep-alive

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

使用keep-alive

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

再次进入缓存的页面,只会触发beforeRouteEnter -->activated --> deactivated 。created和mounted不会再执行。咱们能够利用不一样的钩子函数,作不一样的事。务必理解上述钩子函数的执行时机和执行顺序,本教程的核心就依赖于此钩子函数

activated和deactivated是使用keep-alive后,vue中比较重要的两个钩子函数,建议详细了解下。web

在A页面中经过beforeRouteEnter这个钩子函数中判断是从哪一个页面过来的

beforeRouteLeave(to, from, next) {

// 路由导航钩子,此时还不能获取组件实例 `this`,因此没法在data中定义变量(利用vm除外)

// 参考 https://router.vuejs.org/zh-cn/advanced/navigation-guards.html

// 因此,利用路由元信息中的meta字段设置变量,方便在各个位置获取。这就是为何在meta中定义isBack

// 参考 https://router.vuejs.org/zh-cn/advanced/meta.html

if (from.path === '/detail'){

//判断是从哪一个路由过来的,

//若是是B页面即detail页面过来的,代表当前页面不须要刷新获取新数据,直接用以前缓存的数据便可

to.meta.isBack = true;

}else{

to.meta.isBack = false;

}

next();

},

data中定义变量isFirstEnter用来判断是否第一次进入,或是否刷新了页面,默认false

data() {

return {

isFirstEnter:false,

};

},

created中把isFirstEnter变为true,说明是第一次进入或刷新了页面

created() {

this.isFirstEnter=true;

// 只有第一次进入或者刷新页面后才会执行此钩子函数

// 使用keep-alive后(2+次)进入不会再执行此钩子函数

this.$nextTick(() => {

this.getLists();

});

},

activated中增长判断条件

activated() {

if(this.$route.meta.isBack || !this.isFirstEnter){

// 若是isBack是false,代表须要获取新数据,不然就再也不请求,直接使用缓存的数据

// 若是isFirstEnter是true,代表是第一次进入此页面或用户刷新了页面,需获取新数据

this.tradeList=[]

this.AjaxList = [] //把数据清空,能够稍微避免让用户看到以前缓存的数据

this.pageNum = 1;

this.$nextTick(() => {

this.getLists();

});

}else{

this.$route.meta.isBack=false

this.isFirstEnter=false;

}

},


http://chatgpt.dhexx.cn/article/0jTijfO2.shtml

相关文章

Vue生命周期和钩子函数及使用keeplive缓存页面不重新加载

Vue生命周期 每个Vue实例在被创建之前都要经过一系列的初始化过程,这个过程就是vue的生命周期,在这个过程中会有一些钩子函数会得到回调 Vue中能够被网页直接使用的最小单位就是组件,我们经常写的: var vm new Vue({el: #app,...…

LVS(三)lvs+keeplive

一 场景引入1 我们知道LVS仅仅是做根据调度算法和策略来做负载均衡的,LVS本身只是调度后端服务器,并不管后端服务器的死活,想想这样一个场景:如果由于由于某种原因,后端服务器挂掉,而调度服务器却不知道&am…

lvs+keeplive

Keepalived概述 调度出现单点故障,如何解决?Keepalived实现了高可用集群Keeepalived最初是为LVS设计的,专门监控各服务器节点状态Keepalived后来加入了VRRP功能,防止单点故障 Keepalived运行原理 Keepalived检测每个服务器节点…

使用keeplive处理socket网络异常断开

网络异常断开原因主要有那些呢?归纳起来主要有以下两种: 1、客户端程序异常。 对于这种情况,我们很好处理,因为客户端程序异常退出会在服务端引发ConnectionReset的Socket异常(就是WinSock2中的10054异常)。…

mysql mm keeplive_mysql +keeplive

下载tar包 ./configure --prefix/usr/local/keepalived --with-kernel-dir/usr/src/kernels/2.6.32-431.el6.x86_64/ \ 注意加内核 &&make && make install cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ cp /usr/local/keepalived…

解决keep-live使用之后的问题

keep-aliv能够帮助我们实现页面ajax请求只被请求一次,在你跳转页面的时候,也不会被请求多次,可是比如在旅游页面中,当我们在城市选择页面重新选择城市,这个时候就需要重新发送一个ajax请求,来显示对应城市的…

nginx和keeplive实现负载均衡高可用

一、 Keeplive服务介绍 Keeplive期初是专门为LVS设计的,专门用来监控LVS集群系统中各个服务节点的状态,后来又加入VRRP的功能,因此除了配合LVS服务以外,也可以作为其他服务(nginx,haroxy)的高可…

php用Ajax传递数组

代码如下: 定义array数组 var array [1,2,3];$.ajax({url:"cart.php?actdelcart",async:false,type:POST,data:{array:array},dataType:json,traditional: true,success:function(data){alert(data)},error:function(){alert("#");}}); 当我们用ajax传递…

【JQuery】Ajax 参数为数组 的方法

背景介绍 前端页面为HTML, 后端为Spring html中根据多选框的值,使用ajax请求接口动态加载其他元素的选项值。 代码 // select 下拉多选框的值var idCardType $("#idCardType").val();// [2075, 2077, 2078]$.ajax({url : url,type : "…

使用ajax传递数组和后台接收

使用ajax异步的提交多选框得到需要操作的对象的id,这时我们可以把每一个id做出一个对象,之后放到一个数组中,再使用JSON.stringify()对这个数组进行json的格式化;在后台中再inputStream中解析出我们的json字符串,之后只…

ajax传数组,后端接收数组

ajax内容 使用JSON.stringify()将数组转换为JSON字符串 //发送ajax将数组发送给handler$.ajax({url:"admin/batch/remove.json", //服务器接收请求的URL地址type:"post", //设置请求方式postcontentType:"application/json;charsetUTF-8&…

教你怎么用ajax传数组(也可以是转为json)

我之前写过一个关于ajax的详解,那个是标准的ajax,今天介绍的是怎么用ajax传递数组这样的数据类型呢?很多的时候我们需要给后端的数据不是几个单独的数据,一般见到的代码的是这样的: data: { id : id, name : name, se…

Ajax传递数组到后台的两种方式

直接传输不可行 第一种 将ajax参数传递修改为tradition: traditional: true $.ajax({xhrFields: {withCredentials: true},async: true,url: basePath "/consumer/work",type: "post",dataType: "json",traditional: true,data : {sql :text,/…

前端ajax发送数组请求的两种方式

今天踩了一个大坑 就是使用ajax将数组发送到后台 后台的controller接收不到 好的 废话不多说 直接上干货 第一种方式: 直接传送数组 后台接收的话需要使用 RequestParam(value "userIds") Long[ ] 来接收 第二种方式: 将数组转换为List …

jquery ajax 向后台传递数组参数

Ajax 传递数组到后台 博客分类: JavaScript jquery ajax 向后台传递数组参数示例 Js代码 function login123(){ var nameArr new Array(); nameArr.push("adm,in"); nameArr.push("jo,in"); nameArr.p…

JFINAL+Ajax传参 array 数组方法 获取request中数组

前台代码js var _list [];for (var i 0; i < array.length; i) { _list[i] array[i]; } $.ajax({ type: "post",url: "",data: {"ids": _list },dataType: "json",success: function(data){alert("添加成功"); …

ajax向后端传递数组

https://blog.csdn.net/feinifi/article/details/81180673 https://blog.csdn.net/weixin_44150474/article/details/103526735 https://www.cnblogs.com/lijianda/p/9936775.html https://blog.csdn.net/weixin_44150474/article/details/103526735 ajax在web项目开发中经常…

ajax通过post方法传数组

ajax在web项目开发中经常会用到&#xff0c;平时我们传递数据&#xff0c;基本都是一个参数名对应一个参数值&#xff0c;后端通过参数名就可以得到参数&#xff0c;从而进行相关逻辑处理&#xff0c;但是有时候我们会遇到批量操作&#xff0c;比如批量删除一个列表&#xff0c…

ajax 传数组

使用 ajax 传数组&#xff0c;可以有很多种方式实现&#xff0c;如将数组序列化成 json字符串&#xff0c;或者将数组转换成字符串&#xff0c;都能实现。这里介绍一种方式&#xff0c;添加属性 traditional: true&#xff0c;直接传 代码如下 controller package com.approv…

Ajax传递数组

Ajax传递数组与后端接收 在此记录刚开始做开发的时候&#xff0c;Ajax都不怎么会用&#xff0c;都只是传一些简单的字符串&#xff0c;那Ajax怎么将数组传到服务器&#xff0c;先看一下Ajax的结构 //建立两种类型的数组,这两种类型的数组都是经常用到的var arryA new Array(…