文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

keep-alive组件怎么在Vue中使用

2023-06-14 11:32

关注

这篇文章将为大家详细讲解有关keep-alive组件怎么在Vue中使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

 一、keep-alive 用法

< keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。
和 < transition> 相似,< keep-alive> 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在组件的父组件链中。

当组件在 < keep-alive> 内被切换,它的 activated 和 deactivated 这两个生命周期钩子函数将会被对应执行。

Props:

  include - 字符串或正则表达式。只有名称匹配的组件会被缓存。
  exclude - 字符串或正则表达式。任何名称匹配的组件都不会被缓存。
  max - 数字。最多可以缓存多少组件实例。

如果你只想缓存部分组件的状态,可以使用include属性。

如果你想除掉一些组件,其他的才被缓存,可以使用exlucde属性。

最多可以缓存多少组件实例。一旦这个数字达到了,在新实例被创建之前,已缓存组件中最久没有被访问的实例会被销毁掉。

<keep-alive :max="10">  <component :is="view"></component></keep-alive>

使用示例:

1.缓存所有页面:
<keep-alive>    <router-view></router-view>    <!--这里是会被缓存的组件--></keep-alive>
2.根据条件缓存部分页面

(更多用法见官网API)

<template>  <div id="app">  // 1. 将缓存 name 为 newsList 或者 productList 的组件      <keep-alive include='newsList,productList'>         <router-view/>      </keep-alive>// 2. 将不缓存 name 为 test 的组件<keep-alive exclude='test'>    <router-view/></keep-alive>  </div></template><script>export default {  name: 'App'}</script>

注意:

还有一步,你必须在需要被缓存状态的组件的script部分,给组件添加一个name属性。 如果没有使用keep-alive缓存状态的组件,可以不写name属性。但是如果使用了keep-alive缓存该组件状态,则此组件必须有这个属性。并且,这个属性的值,还必须跟标签中include属性的值完全一致,包括大小写。 以productList.vue组件为例 

<template>    <!-- 这里是productList组件的html结构部分 --></template><script>export default {    name: "productList",  //如果使用了keep-alive缓存该组件状态,则此组件必须有这个属性。    data(){        return {}    }</script>
3.结合vue-router,缓存部分页面
export default new Router({  mode: 'history',  routes: [    {      path: '/',      name: 'home',      component: Home,      children: [        {          path: 'products',          name: 'products',          component: products,          meta: {        keepAlive: true // 需要缓存        }        },        {          path: 'newsDetails',          name: 'newsDetails',          component: newsDetails,          meta: {        keepAlive: false  // 不需要缓存        }        }      ]    }  ]})

在 App.vue 里面

<template>  <div id="app">    <keep-alive>      <router-view v-if="$route.meta.keepAlive"></router-view>    </keep-alive>    <router-view v-if="!$route.meta.keepAlive"></router-view>  </div></template><script>export default {  name: 'App'}</script>

二、keep-alive 生命周期

包含在 keep-alive 中创建的组件,会多出两个生命周期的钩子: activated 与 deactivated。

1. activated

      在 keep-alive 组件激活时调用。

在组件第一次渲染时会被调用,之后在每次缓存组件被激活时调用。

第一次进入缓存路由/组件,在mounted后面,beforeRouteEnter守卫传给 next 的回调函数之前调用:

页面第一次进入的时候,钩子触发的顺序是created->mounted->activated

因为组件被缓存了,再次进入缓存路由/组件时,不会触发这些钩子:

  beforeCreate created beforeMount mounted 都不会触发。

2. deactivated

      在 keep-alive 组件停用(离开路由)时调用。       

使用了keep-alive就不会调用beforeDestroy(组件销毁前钩子)和destroyed(组件销毁),因为组件没被销毁,被缓存起来了。

这个钩子可以看作beforeDestroy的替代,如果你缓存了组件,要在组件销毁的的时候做一些事情,你可以放在这个钩子里。

  注意:

 使用 keep-alive 会将数据保留在内存中,如果要在每次进入页面的时候获取最新的数据,需要在 activated 阶段获取数据,承担原来created钩子函数中获取数据的任务。

只有组件被 keep-alive 包裹时,这两个生命周期函数才会被调用,如果作为正常组件使用,是不会被调用的,以及在 2.1.0 版本之后,使用 exclude 排除之后,就算被包裹在 keep-alive 中,这两个钩子函数依然不会被调用!

关于keep-alive组件怎么在Vue中使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯