keep-alive

keep-alive是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。

keep-alive包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 transition 相似,keep-alive是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件链中。使用keep-alive后会增加两个钩子函数 activaed 被keepalive组件激活时调用 deactivaed 被keepalive组件停用是时调用

keep-alive有两个属性 分别是 include exclude

  • include:只有匹配的组件会被缓存。
  • exclude: 不会缓存与之匹配的组件。
    用法
//name名字为test的组件会被缓存
<keep-alive include="test">
  <component></component>
</keep-alive>
//将缓存name为a或者b的组件,结合动态组件使用
<keep-alive include="a,b">
  <component :is="view"></component>
</keep-alive>

//使用正则,需使用v-bind
<keep-alive :include="/a|b/">
  <component :is="view"></component>
</keep-alive>

//动态绑定
<keep-alive :include="a">
  <router-view></router-view>
</keep-alive>
//name名字为a的不会被缓存
<keep-alive exclude="a">
  <component></component>
</keep-alive>

结合router,缓存部分页面
使用$route.meta的keepAlive属性:

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

需要在router中设置meta:

//...router.js

  routes: [
    {
      path: '/',
      name: 'Hello',
      component: Hello,
      meta: {
        keepAlive: false // 不需要缓存
      }
    },
    {
      path: '/page1',
      name: 'Page1',
      component: Page1,
      meta: {
        keepAlive: true // 需要被缓存
      }
    }
  ]

使用效果

以上面router的代码为例:

<!-- Page1页面 -->
<template>
  <div class="hello">
    <h1>Vue</h1>
    <h2>{{msg}}</h2>
    <input placeholder="输入框"></input>
  </div>
</template>
<!-- Hello页面 -->
<template>
  <div class="hello">
    <h1>{{msg}}</h1>
  </div>
</template>

(1) 在Page1页面输入框输入“asd”,然后手动跳转到Hello页面;

(2) 回到Page1页面发现之前输入的"asd"依然保留,说明页面信息成功保存在内存中;
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值