缓存组件keep-alive

前言:
被包含在keep-alive中的组件会多出两个生命周期函数:
activated: 在keep-alive组件激活时调用,进入被keep-alive包裹的组件时触发
deactivated:在keep-alive组件离开时都调用

使用方法:

  1. 直接包裹要缓存的组件,或者在app.vue中包裹所有组件
	<keep-alive :include="home">
        <router-view />
     </keep-alive>
  1. 通过判断路由中meta中的状态

router/index.js

 meta: {
      keepAlive: true
    },

app.vue

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

	</div>
</template>

3.通过include和exclude来缓存部分页面,每个组件中得有一个name属性

include:字符串或正则表达式。只有名称匹配的组件才会被缓存
exclude:字符串或正则表达式。任何匹配的组件都不会缓存

app.vue

	<keep-alive :include="home">
        <router-view />
     </keep-alive>

Home.vue

name: "home",

 activated() {
    console.log("home 组件激活拉");
    }
  },
  deactivated() {
    console.log("home 组件销毁拉");
  },

要被缓存的没被缓存注,可以用一下的形式,进行缓存

条件:1、列表页不可使用懒加载延迟加载数据,2、列表页需要使用keepAlive缓存

beforeRouteLeave(to,from,next){  
//离开页面之前将高度存储到sessionStorage。
这里不建议用localStorage,因为session在关闭浏览器时会自动清除,
而local则需要手动清除,有点麻烦。
    sessionStorage.setItem('scrollH',document.getElementById('demo').scrollTop)
    next()
},

activated(){   //在activated生命周期内,从sessionStorage中读取高度值并设置到dom
    if(sessionStorage.getItem('scrollH')){
        document.getElementById('demo').scrollTop=sessionStorage.getItem('scrollH')
    }
},
tip:给Home(其他组件)这个组件的div,定义id=“demo”
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue的keep-alive组件是用来进行组件缓存的。它可以在特定的场景下使用,比如需要缓存某个组件或者缓存所有组件。\[1\]要缓存某个组件,可以在该组件的外层嵌套一层<keep-alive>标签,并将需要缓存组件放在<keep-alive>标签内部。例如,在APP.vue中缓存NativeBtn组件可以这样写:<keep-alive><NativeBtn /></keep-alive>。\[2\]如果需要缓存所有组件,可以将<keep-alive>标签放在根组件的外层,并将<router-view>放在<keep-alive>标签内部。例如,在APP.vue中缓存所有组件可以这样写:<keep-alive><router-view /></keep-alive>。这样,在路由切换时,被缓存组件将会保留其状态,而不会重新渲染。 #### 引用[.reference_title] - *1* [vue中使用keep-alive进行组件缓存(解决组件缓存问题)](https://blog.csdn.net/pipizhou16/article/details/126033711)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [vue中缓存组件keep-alive](https://blog.csdn.net/Celester_best/article/details/125418259)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值