当前位置: 首页 > news >正文

vue2和vue3 的 keep-alive的用法

vue3的keep-alive用法和vue2用法是不同的。

vue2 keep-alive

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

keep-alive作用:
用来缓存组件,避免多次加载相同的组件,减少性能消耗,提高用户体验。

keep-alive使用方式:

方式一:在App.vue中使用keep-alive标签,表示缓存所有页面

  <div id="app">
  	<keep-alive>
	    <tar-bar></tar-bar>
	    <div class="container">
	      <left-menu></left-menu>
	      <Main />
	    </div>
    </keep-alive>
  </div>

方式二:按条件缓存,使用include,exclude判断是否缓存

// 1. 将缓存 name 为 cc 的组件,如果有多个,可用逗号分
  	<keep-alive include='cc,cc1,cc2'>
      <router-view/>
    </keep-alive>
    
// 2. 将不缓存 name 为 cc 的组件
	<keep-alive exclude='cc'>
  	  <router-view/>
	</keep-alive>
	
// 3. 还可使用属性绑定动态判断
	<keep-alive :include='includedComs'>
  	  <router-view/>
	</keep-alive>

方式三:在router目录下的index.js中,
第一步:使用meta:{keepAlive = true },表示需要缓存

 const routes = [
  {
    path:'/',
    component:Home,
    meta:{
        keepalive:true
    }
  },
  {
    path:'/login',
    component:Login
  },
   {
      path:'/edit',
      component:Edit,
      meta:{
          istoken: true
      }
   },
  {
      path:'/home',
      component:Home,
      meta:{
          keepalive:true
      }
  }
]

第二步:在App.vue中进行判断

<div id="app">
    <!--keep-alive 表示页面不会被销毁,即保持页面状态-->
    <keep-alive>
      <router-view v-if="$route.meta.keepalive"></router-view>
    </keep-alive>
    <router-view v-if="!$route.meta.keepalive"></router-view>
 </div>

vue3中 keep-alive

1基本用法(通过插槽)

	<router-view v-slot="{ Component }">
	  <keep-alive>
	    <component :is="Component"/>
	  </keep-alive>
	</router-view>

在这里插入图片描述
2条件缓存(通过插槽的方式)
示例:列表页面跳转到详情页面的情况,保证上一级页面的页面数据不会刷新,例如两个页面A页面—>>>列表页,B页面—>>>详情页,A–>>B–>>A ,缓存A页面的数据

<template>
	<router-view v-slot="{ Component }">
	  <keep-alive :include="includeList">
	    <component :is="Component"/>
	  </keep-alive>
	</router-view>
</template>
<script>
import { reactive, watch, toRefs } from '@vue/runtime-core'
import { useRoute, useRouter }
  export default {
    name: 'Test',
    setup(){
      const state = reactive({
        includeList: []
      })
      const route = useRoute()
      // const router = useRouter()
      watch(() => route,(newVal,oldVal)=>{
        if(newVal.meta.keepAlive && state.includeList.indexOf(newVal.name) === -1){
          state.includeList.push(newVal.name);
          console.log(state.includeList);
        }
      },{deep:true}) // 开启深度监听
      return{
        ...toRefs(state)
      }
    }
  }
</script>

路由页面的配置

	{
	  path: 'test',
	  name: 'Test',
	  component: () => import('@/views/Test'),
	  meta: {
	    keepAlive: true, // 组件需要缓存
	  }
	},

相关文章:

  • php地址赋值值和传值赋值
  • vue3 Uncaught (in promise) TypeError: Cannot read properties of undefined 其实是解构赋值的问题
  • __new__方法
  • 动态样式绑定--style 和 class
  • Java多线程之Lock的使用(一)
  • vue项目 移动端 实现购物车功能
  • 火柴棒等式(2008年NOIP全国联赛提高组)
  • 如何用几何画板动态演示电饭锅工作原理
  • git 撤回 (git版本回退处理)
  • 好用的开发工具
  • 前端 重写 toFixed 方法并封装(不采用银行家算法返回正常数字类型)
  • Oracle死锁
  • 项目中new Promise和async、await中的使用,以及promise.all在项目中的实际应用
  • Android开发学习——ListView+BaseAdapter的使用
  • react 项目商城中,显示或者隐藏组件(锚点)
  • 「面试题」如何实现一个圣杯布局?
  • 2019.2.20 c++ 知识梳理
  • docker python 配置
  • idea + plantuml 画流程图
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • SpingCloudBus整合RabbitMQ
  • tab.js分享及浏览器兼容性问题汇总
  • vue学习系列(二)vue-cli
  • Web标准制定过程
  • 程序员最讨厌的9句话,你可有补充?
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 构造函数(constructor)与原型链(prototype)关系
  • 好的网址,关于.net 4.0 ,vs 2010
  • 看域名解析域名安全对SEO的影响
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 力扣(LeetCode)965
  • 算法---两个栈实现一个队列
  • 运行时添加log4j2的appender
  • 整理一些计算机基础知识!
  • #大学#套接字
  • $forceUpdate()函数
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (26)4.7 字符函数和字符串函数
  • (day6) 319. 灯泡开关
  • (十)c52学习之旅-定时器实验
  • (十一)手动添加用户和文件的特殊权限
  • (十一)图像的罗伯特梯度锐化
  • (推荐)叮当——中文语音对话机器人
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .Net Remoting(分离服务程序实现) - Part.3
  • .skip() 和 .only() 的使用
  • /var/log/cvslog 太大
  • @requestBody写与不写的情况
  • @RequestMapping用法详解
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [Angularjs]ng-select和ng-options
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [BZOJ] 2427: [HAOI2010]软件安装
  • [Codeforces] number theory (R1600) Part.11