广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue前端开发keepAlive使用详解
  • 121
分享到

vue前端开发keepAlive使用详解

2024-04-02 19:04:59 121人浏览 薄情痞子
摘要

目录前言keep-avlive钩子函数keep-avlive缓存哪些组件小结及注意事项前言 keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,

前言

keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。

在组件切换过程中将状态保留在内存中,防止重复渲染DOM,减少加载时间及性能消耗,提高用户体验性。使用方式为


<keep-alive>
    <component />
</keep-alive>

这里的component会被缓存。

keep-avlive钩子函数

被包含在 keep-alive 中创建的组件,会多出两个生命周期的钩子: activated与deactivated。activated:在 keep-alive 组件激活时调用,keep-alive 会将数据保留在内存中,如果要在每次进入页面的时候获取最新的数据,需要在 activated 阶段获取数据,承担原来 created 钩子函数中获取数据的任务
deactivated:在 keep-alive 组件停用时调用,使用了keep-alive就不会调用beforeDestory和destoryed钩子,因为组件没有被销毁,而是被缓存起来了,所以deactivated钩子可以看做是beforeDestory和destoryed的替代,如清空localStorge数据等。

keep-avlive缓存哪些组件

keep-avlive缓存哪些组件通过两种方式,一种是通过keep-avlive组件提供的include、exclude属性通过参数进行匹配对应的组件进行缓存,另一种通过route中meta属性的设置。
使用include、exclude属性完成缓存组件设置



<keep-alive include='test'>
      <router-view/>
</keep-alive>

使用include是将缓存name为test的组件。


<keep-alive exclude="test"> 
  <router-view/>
</keep-alive>

使用exclude,将不缓存name为test的组件。
使用route中meta属性的设置缓存组件,如


export default new Router({
  mode: 'history',
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home,
      redirect: 'Goods',
      children: [
        {
          path: 'goods',
          name: 'goods',
          component: Goods,
          meta: {
        	keepAlive: false // 不需要缓存
      	  }
        },
        {
          path: 'ratings',
          name: 'ratings',
          component: Ratings,
          meta: {
        	keepAlive: true  // 需要缓存
      	  }
        }
      ]
    }
  ]
})

goods组件需要缓存,ratings不需要缓存。在使用 到中使用以下语句动态完成组件缓存设置,设置代码如下


<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>

示例

设置两个组件KeepCom1,KeepCom2,KeepCom1设置缓存,KeepCom2不设置缓存。同时测试两个钩子函数的使用,这里使用路由meta实现缓存组件的设置。
KeepCom1代码如下:


<template>
  <div class="wrapper">
    <ul class="content"></ul>
    <button class="add" id="add" @click="add">添加子元素</button>
  </div>
</template>
<script>
export default {
  name: 'keepCom1',
  methods: {
    add () {
      let ul = document.getElementsByClassName('content')[0]
      let li = document.createElement('li')
      li.innerhtml = '我是添加的元素'
      ul.appendChild(li)
    }
  },
  activated () {
    console.log('缓存activated执行')
  },
  deactivated () {
    console.log('缓存deactivated执行')
  }
}
</script>
<style>
</style>

KeepCom2代码如下:


<template>
  <div class="wrapper">
    <ul class="content"></ul>
    <button class="add" id="add" @click="add">添加子元素</button>
  </div>
</template>

<script>
export default {
  name: 'keepCom2',
  methods: {
    add () {
      let ul = document.getElementsByClassName('content')[0]
      let li = document.createElement('li')
      li.innerHTML = '我是添加的元素'
      ul.appendChild(li)
    }
  },
  activated () {
    console.log('缓存activated执行')
  },
  deactivated () {
    console.log('缓存deactivated执行')
  }
}
</script>
<style>
</style>

KeepCom1和KeepCom2代码基本一致,就是给页面增加结点。
keepAvliveTest代码如下


<template>
  <div align="center" style="margin-top: 20px;">
    <router-link to="/keepAvliveTest/keepcom1">使用缓存</router-link>
    <router-link to="/keepAvliveTest/keepcom2">不使用缓存</router-link>
    <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: 'keepAvliveTest'
}
</script>
<style>
</style>

完成keepcom1和keepcom2组件切换,执行后的结果为

在这里插入图片描述

keepcom1使用缓存,切换页面时,上次添加三个元素还在,而且钩子函数得到执行。keepcom2没有使用缓存,切换页面时,上次添加一个元素不存在了,恢复到初始状态。而且两个钩子没有得到执行。

小结及注意事项

在设置需要缓存的页面时,推荐使用router中meta标签,这样代码的耦合度较低。keep-alive 先匹配被包含组件的 name 字段,如果 name 不可用,则匹配当前组件 components 配置中的注册名称。包含在 keep-alive 中,但符合 exclude ,不会调用activated和 deactivated

以上就是vue前端开发keepAlive使用详解的详细内容,更多关于vue前端的资料请关注编程网其它相关文章!

--结束END--

本文标题: vue前端开发keepAlive使用详解

本文链接: https://www.lsjlt.com/news/137657.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue前端开发keepAlive使用详解
    目录前言keep-avlive钩子函数keep-avlive缓存哪些组件小结及注意事项前言 keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,...
    99+
    2022-11-12
  • Vue框架和前后端开发详解
    目录1. 抽象工厂模式2. UML图3. 代码示例4. 总结4.1 抽象工厂模式的总结4.2 工厂模式的总结1. 抽象工厂模式 针对工厂方法模式无法创建一组相关或相互依赖对象的问题,...
    99+
    2022-11-12
  • vue之keepAlive使用案例详解
    在开发中经常有从列表跳到详情页,然后返回详情页的时候需要缓存列表页的状态(比如滚动位置信息),这个时候就需要保存状态,要缓存状态;vue里提供了keep-alive组件用来缓存状态。...
    99+
    2022-11-12
  • vue前端开发层次嵌套组件的通信详解
    目录前言示例小结前言 vue父子组件之间通过props很容易的将父组件的值传递给子组件,如果一个组件嵌套很多层,每一层之间度需要同props进行传值,很麻烦,且不易维护 示例 【示例...
    99+
    2022-11-12
  • vue前端开发辅助函数状态管理详解示例
    目录mapStatemapGettersmapMutationsmapActions示例小结mapState 当一个组件需要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗...
    99+
    2022-11-12
  • Vue Element前端应用开发之前端API接口的封装
    目录1、ABP框架API接口的回顾2、基于ES6的JS业务类的封装1、ABP框架API接口的回顾 ABP是ASP.NET Boilerplate的简称,ABP是一个开源且文档友好的应...
    99+
    2022-11-12
  • vue中keepAlive组件的作用和使用方法详解
    前言 在面试的时候,很多面试官再问vue的时候可能就会提一嘴,你知道keep-alive有什么作用吗? keep-alive是vue内置的一个组件,而这个组件的作用就是能够缓存不活动...
    99+
    2022-11-12
  • 使用Visual Studio 2022开发前端的详细教程
    目录创建宿主项目安装前端库在浏览器引入模块模块化开发前端开发环境多数基于Node.js,好处不多说了。但与使用Visual Studio开发的后端Asp.Net Core项目一起调试...
    99+
    2022-11-13
  • 鸿蒙OS如何开发一个前端应用详解
    目录鸿蒙的诞生编写一个HarmonyOS第一步第二步第三步第四步总结鸿蒙的诞生 HarmonyOS是一款面向万物互联时代的、全新的分布式操作系统;它实现了一个非常轻量级的 MVVM...
    99+
    2022-11-12
  • Vue Element前端应用开发之echarts图表
    目录概述1、图表组件的安装使用2、各种图表的展示处理概述 基于图表的处理,我们一般往往都是利用对应第三方的图表组件,然后在这个基础上为它的数据模型提供符合要求的图表数据即可,VUE+...
    99+
    2022-11-12
  • 前端开发指南之vue-grid-layout的使用实例
    目录前言效果图一、vue中简单案例1、安装组件 NPM2、vue文件二、vue3使用(vue文件)1、需要导入vue3支持的该版本插件2、在mian.js里引入:三、在IE上无法打开...
    99+
    2022-11-13
  • Vue Element前端应用开发之获取后端数据
    目录概述1、后端数据的获取处理2、界面展示处理概述 在前面随笔《循序渐进VUE+Element 前端应用开发之动态菜单和路由的关联处理》中介绍了在Vue + Element整合框架中...
    99+
    2022-11-12
  • Vue Element前端应用开发之整合ABP框架的前端登录
    目录概述1、ABP开发框架的回顾2、Vue+Element整合ABP框架的前端登录处理概述 ABP框架作为后端,是一个非常不错的技术方向,但是前端再使用Asp.NET 进行开发的话,...
    99+
    2022-11-12
  • Vue Element前端应用开发之根据ABP后端接口实现前端展示
    目录概述1、ABP接口和前端对接处理2、ABP接口信息和前端界面处理概述 ABP(ASP.NET Boilerplate)框架主要是基于.net core 进行的后端Web API的...
    99+
    2022-11-12
  • Java前端开发之HttpServletRequest的使用
    目录接口详解搭设基本测试环境取回 keys取回 values请求域与应用域应用域对象请求域对象跳转与转发转发一次请求转发要求转发区别request 常见方法设置字符集几种常见属性获取...
    99+
    2023-01-05
    Java HttpServletRequest用法 Java HttpServletRequest的使用
  • Vue Element前端应用开发之图标的维护和使用
    目录概述1、Vue-Awesome的使用介绍2、导入Element 图标和Vue-Awesome图标概述 Vue-Awesome 是基于 Vue.js 的 SVG 图标组件,内置图标...
    99+
    2022-11-12
  • javascrip高级前端开发常用的几个API示例详解
    目录MutationObserverAPI特点IntersectionObserverAPI举个例子图片懒加载无限滚动getComputedStyle()API与style的异同ge...
    99+
    2022-11-12
  • 使用Element进行前端开发的详细图文教程
    目录前言1、添加路由2、添加页面3、添加元素4、添加事件5、提交表单数据总结前言 本文介绍如何使用vue-element-admin+element进行前端开发。 我们可以使用ele...
    99+
    2022-11-13
    element 前端 element编程 element前端框架
  • Vue Element前端应用开发之开发环境的准备工作
    目录概述1、开发所需的软件环境1)VS code的安装2) 安装node开发环境3)vue脚手架的安装4)Vue DevTool Chrome插件的安装2、开发环境的配置使用概述 之...
    99+
    2022-11-12
  • Vue Element前端应用开发之树列表组件
    目录1、常规树列表控件的使用2、下拉框树列表的处理1、常规树列表控件的使用 众所周知,一般界面很多情况涉及到树列表的处理,如类型展示,如果是一层的,可以用下拉列表代替,如果是多个层级...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作