关于vue的keep-alive

 一、keep-alive 的作用:

    1 具有缓存的作用

       通过在router.js中的meta配置中添加keepAlive:ture来指定对哪个组件进行缓存

       

    2 具体加了这个有什么影响?

       由于加了keepAlive:true,则该组件被缓存到内存中,那么其他的钩子函数都将不会再执行,除了activated(进来)

       和deactivated(离开),这2个会相应执行,这2个钩子函数是专门for keep-alive的,因此如果需要加keepAlive的组件中需要做什

       初始化的操作,则可以放在activated中执行

二、如何添加keep-alive

    1 在App.vue中添加<keep-alive>包裹<router-view>

      下面加了v-if,意思是如果有配置meta下的keepAlive:true,则使用

      <keep-alive>包裹<router-view>,否则正常的<router-view就行>

<!--缓存想要缓存的页面,实现后退不刷新-->
<!--加上v-if的判断,可以自定义想要缓存的组件,自定义在router里面-->
<keep-alive>
        <router-view v-if="$route.meta.keepAlive" ref="MainView"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive" ref="MainView"></router-view>

    2 在router.js中对你想要缓存的组件添加keepAlive:true

       也就是如果你要下次回到这个组件时不执行那些钩子函数,

       就在对应的配置下加上keepAlive:true,像下面这样就可以了

routes: [
    {
      path: '/',
      name: 'Home',
      component: Home,
      meta: {
        keepAlive: true
      }
    }
]

    3 上面那2个地方配置好之后其实就已经可以了,接下来你可以试一下是否添加成功

       比如:A组件跳转到B组件,给A组件加上keepAlive:true的配置,并在A组件的钩子函数中打印日志,

       观察从A跳转到B再从B跳转回来的时候,钩子函数有没有打印出日志,同样看看activated和deactivated有没有打印日志

    4 因为keep-alive的特性,所以可以在一些情况下实现返回上一个页面不刷新的功能,只是有的时候单纯使用这个会无效,这个

       时候可以考虑设置scrollTop来配合实现该功能。

三、通过代码手动控制当前组件是否设置keepAlive

可以在beforeRouteEnter(to, from, next)这个函数中去设置,这个函数是在路由进入之前执行的

选择这个函数的原因是:这个函数的from参数中可以拿到路由是从哪个组件过来的,而且在有的钩子函数中执行可能太晚了,当前这次的设置以及无效。如:

beforeRouteEnter(to, from, next){
	// 如果是其他2个tab页切换到首页,则需重新刷新页面,否则缓存不重新加载(如:进入二级页面)
	if(['EventIndex','UserIndex'].includes(from.name)){
		to.meta.keepAlive = false
	} else {
		to.meta.keepAlive = true
	}
	next();
},

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值