keep-alive 介绍及使用问题:多次使用同一组件,数据不更新

news/2024/7/9 23:41:50 标签: vue

keep-alive是vue官方自带的组件标签,多结合router-view来使用

<keep-alive>
	<router-view></router-view>
</keep-alive>

功能介绍
在使用this.$router.push()跳转路由加载组件时,一般情况每次组件都会再次加载,如果组件内有请求也会再次去请求数据,就会造成不必要的请求,影响用户体验;
而keep-alive可以缓存组件,及其中的数据,使再次跳转该路由时其中的组件和数据不会再次请求,大大的提高的页面体验
基本属性简介

//	标签上的两个属性
<keep-alive :include="aliveMenus" :exclude="reMenus" max="10">
	<router-view></router-view>
</keep-alive>

//	include: 缓存其中的组件,可以在路由发生变化时添加或者减少
//	例:[
//		{ name: 'a', path: '/a', meta: {}, query: {}, params: {} },
//		{ name: 'b', path: '/b', meta: {}, query: {}, params: {} }
//	  ]
//	exclude: 不缓存其中的的组件
//	max: 最多可以缓存组件的个数

生命周期简介
keep-alive会使包裹的组件新增两个生命周期:
activated:缓存组件激活时触发
执行顺序:首次进入created>mounted>activated,二次进入就只会触发activated
deactivated:缓存组件失活时触发

使用问题
在项目中会遇到这么一个场景:
一个列表显示几个数据,会有一个面包屑记录并显示打开过的组件。例如在列表中选择一条信息查看详情就会打开具体的详情页面。
在这里插入图片描述

现在,选择一条列表查看详情打开了一个页面,面包屑加了一个记录。再次回到列表点击另一个查看详情,又会打开另一个详情页面。但是这两个页面所用的组件是同一个,但是在第一次使用时就被缓存了,这时候你新打开的详情页面就是上次的数据,并未更新。

解决方法

// 1.通过监听路由变化,在watch中监听'$route'
watch: {
	'$route'(to, from) {
		// 这里的形参to和from与路由拦截的形参是一样的
	}
}
// 2.通过路由钩子,beforeUpdate
beforeUpdate (to, from, next) {
	// 这里的形参to和from,next与路由拦截的形参是一样的,记住完成操作一定要执行next()才能完成跳转
}

http://www.niftyadmin.cn/n/1064967.html

相关文章

后台是怎么判断管理员用户还是普通用户_[mini-blog]小程序后台管理功能的实现

这几天陆续把博客小程序后台管理的几个功能实现了&#xff0c;目前实现的比较「粗糙」&#xff0c;但比较实用的管理的功能基本上实现了。 成果展示由于「后台管理」的部分只有管理员才能看到&#xff0c;在我的小程序上不能体现&#xff0c;但整体开发难度不是很大&#xff0c…

怎样用自己的电脑做服务器(转)

好多人都想有一个自已的个人主页空间&#xff0c;可大部分空间都要钱&#xff0c;比如一些学生们&#xff0c;哪有钱买个空间啊。不用急&#xff0c;家里有电脑的朋友们就可以有属于自已的 网站空间了。家里没电脑的朋友也不要急&#xff0c;大家可以到百度空间申请一个免费的个…

详解HttpURLConnection

请求响应流程设置连接参数的方法setAllowUserInteractionsetDoInputsetDoOutputsetIfModifiedSincesetUseCachessetDefaultAllowUserInteractionsetDefaultUseCaches设置请求头或响应头HTTP请求允许一个key带多个用逗号分开的values&#xff0c;但是HttpURLConnection只提供了单…

知乎一道前端面试题详解,关于this的使用

请说明要输出正确的myName的值要如何修改程序?并解释原因 foo function(){this.myName "Foo function."; } foo.prototype.sayHello function(){alert(this.myName); } foo.prototype.bar function(){setTimeout(this.sayHello, 1000); } var f new foo; f.bar…

vue3.0 + typescript 变量基本类型及使用介绍

基本类型 布尔值 let a: boolean false // 也只能将boolean类型的值赋值给a数字 let a: number 1 // 也只能将number 类型的值赋值给a // 和JavaScript一样&#xff0c;TypeScript里的所有数字都是浮点数。 这些浮点数的类型是 number。 // 除了支持十进制和十六进制字面量…

OS存储管理——FIFO,LRU,OPT命中率

课程设计课题 存储管理程序设计 摘 要 虚拟存储器作为现代操作系统中存储管理的一项重要技术&#xff0c;实现了内存扩充功能。而分页请求分页系统正好可以完美的支持虚拟存储器功能&#xff0c;它具有请求调页功能和页面置换功能。在进程运行过程中。若其所访问的页面不存在&a…

C# 向前台select写值

seletID.Items.Add(new ListItem(“请选择”, “”));