vue的动态组件 keep-alive

1. 什么是动态组件

动态组件指的是 动态切换组件的显示与隐藏

2. 如何实现动态组件渲染

vue提供了一个内置的<component>组件,专门用来实现动态组件的渲染

  • 作用:组件的占位符
  • is的值表示要渲染的组件

示例代码如下:

Left.vue的代码

<template><div class="box">这是左边的组件</div>
</template><script>
export default {name: "Left",
};
</script><style lang="less" scoped>
.box {background-color: pink;border: 1px solid;height: 400px;width: 400px;color: white;
}
</style>

Right.vue的代码

<template><div class="box">这是右边的组件</div>
</template><script>
export default {name: "Right",
};
</script><style lang="less" scoped>
.box {background-color: blue;border: 1px solid;height: 400px;width: 400px;color: white;
}
</style>

App.vue的代码

<template><div id="app"><div class="content"><component :is="name"></component></div><h1>这是一个App组件</h1><button @click="name = 'Left'">显示Left</button><button @click="name = 'Right'">显示Right</button></div>
</template><script>
import Left from "@/components/Left";
import Right from "@/components/Right";
export default {name: "App",components: {Left,Right,},data() {return {name: "Left",};},
};
</script>
<style lang="less">
.content {display: flex;
}
</style>

3.keep-alive的使用

使用keep-alive可以保持状态,组件创建后不会被销毁,

那怕被隐藏了也不会被销毁。

  • 使用keep-alive来保持状态

  • 语法

    <keep-alive><组件名></组件名>
    </keep-alvie>
    

Left.vue的代码

<template><div class="box"><h3>这是左边的组件{{ count }}</h3><button @click="count++">+1</button></div>
</template><script>
export default {name: "Left",data() {return {count: 0,};},created() {console.log("Left组件被创建了");},destroyed() {console.log("Left组件被销毁了");},
};
</script><style lang="less" scoped>
.box {background-color: pink;border: 1px solid;height: 400px;width: 400px;color: white;
}
</style>

Right.vue的代码

<template><div class="box">这是右边的组件</div>
</template><script>
export default {name: "Right",
};
</script><style lang="less" scoped>
.box {background-color: blue;border: 1px solid;height: 400px;width: 400px;color: white;
}
</style>

App.vue的代码

<template><div id="app"><div class="content"><keep-alive><component :is="name"></component></keep-alive></div><h1>这是一个App组件</h1><button @click="name = 'Left'">显示Left</button><button @click="name = 'Right'">显示Right</button></div>
</template><script>
import Left from "@/components/Left";
import Right from "@/components/Right";
export default {name: "App",components: {Left,Right,},data() {return {name: "Left",};},
};
</script>
<style lang="less">
.content {display: flex;
}
</style>

实现效果:

  • 如下:显示右边的组件的时候,但其实左边的组件被销毁,只是状态变为了 inactive,Left组件被缓存了,缓存到了内存中。

3.1 keep-alive 对应的生命周期函数
  • 当组件被缓存的时候,会自动触发 deactivated生命周期函数
  • 当组件被激活的时候,会自动触发activited 生命周期函数
  • 当组件第一次被激活的时候,既会执行 created生命周期函数,又会执行 activited生命周期函数
  • 只有给组件用keep-alive标签包裹的时候,deactivited生命周期函数和activited函数才会被创建
3.2 keep-alive的相关属性
3.2.1 include属性(哪些组件需要被缓存)

因为没有指定哪个组件被缓存,哪个组件不缓存,所以默认被keep-alive包裹所有组件都会被缓存

include属性用来指定:只有名称匹配的组件会被缓存。多个组件名之间 使用英文 逗号 分隔。

  • 匹配首先会检查 组件自身的 name 属性,如果 name 属性 不可用。则匹配它局部注册名称(也就是父组件的 components选项的键值)。匿名的组件不能被匹配

  • 这里指的组件本身name属性是否可用,指的是 组件的name属性是否被指定了值,如果指定了值,但与之不匹配的话,不会去父组件的componenst查看键值。

例如现在有一个需求:Left组件要求被缓存,Right组件不要求被缓存

3.2.2 exclude属性(哪些组件不需要被缓存)
  • exclude属性和include属性不能同时使用,只能用一个
  • 只有名称匹配的组件才不会被缓存,多个组件名之间用 英文逗号 隔开
  • 匹配的规则和 include属性一致,先匹配组件本身的name属性,如果不可用会匹配 局部组件名称,即是 components的键值对

需求:Right组件不希望被缓存

4. 组件注册名称和组件声明名称的区别

  • 如果在 声明组件 的时候, 没有为组件指定 name 名称,则组件的名称默认 就是 注册时候的名称

控制台查看

  • 如果在声明的时候指定name的值,则组件的名称就是 name的值

控制台查看

  • 组件的 注册名称应用场景是 :以标签的形式,把注册好的组件,渲染和使用到页面结构之中。
  • 组件的 声明名称应用场景:结合 keep-alive标签实现缓存功能,以及在调试工具中看到的组件 name 名称

5. 总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/451165.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024版AI大模型转行入门全攻略,零基础入门到精通,收藏这一篇就够了

引言 随着人工智能和大模型&#xff08;如GPT-4、BERT等&#xff09;技术的快速发展&#xff0c;越来越多的专业人士希望转行进入这一领域。大模型开发涉及复杂的技术体系和多样的应用场景&#xff0c;对从业者的知识和能力提出了较高要求。本文将详细解析转行大模型开发所需的…

1.C++经典实例-计算两个数的最大公约数

用户输入两个数字&#xff0c;然后通过程序计算出这两个数字的最大公约数&#xff1a; 最大公约数&#xff08;greatest common divisor&#xff0c;简写为 gcd &#xff1b;或highest common factor&#xff0c;简写为hcf)&#xff0c;指某几个整数共有因子中最大的一个 #in…

RHCE——例行性工作

准备工作 [rootlocalhost ~]# cat /etc/yum.repos.d/aliyun.repo [ali-app] nameali-app baseurlhttps://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/ gpgcheck0[ali-base] nameali-base baseurlhttps://mirrors.aliyun.com/centos-stream/9-stream/Base…

探索YOLO v11:3D人工智能的RGB-D视觉革命

哈喽&#xff0c;各位OAK中国的朋友们! 大家好我是张伯生 今天&#xff0c;我想给大家演示一下最新发布的Yolo V11神经网络 下面我将演示的一个程序是&#xff1a;同时在我们的OAK相机上跑Yolo V11和RGB-D&#xff0c;也就是彩色相机和深度图的一个叠加的一个效果 RGB-D和Yo…

C++标准模板库--vector

vector 介绍 vector&#xff08;向量&#xff09;是一种序列容器&#xff0c;表示为可以改变大小的数组。vector中的元素使用连续的存储位置&#xff0c;这意味着也可以使用指向其元素的常规指针偏移量来访问任意元素&#xff0c;且与数组一样高效。但与数组不同的是&#xff…

网络空间安全之一个WH的超前沿全栈技术深入学习之路(一:渗透测试行业术语扫盲)作者——LJS

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️网络空间安全——全栈前沿技术持续深入学习 专栏跑道二➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️ MYSQL REDIS Advanc…

线性系统性能分析方法3——频率特性分析法(频域分析法)

一种图解的分析方法&#xff0c;不必直接求解系统输出的时域表达式&#xff0c;不需要求解系统的闭环特征根&#xff0c;具有较多的优点。如&#xff1a; ①根据系统的开环频率特性揭示闭环系统的动态性能和稳态性能&#xff0c;得到定性和定量的结论&#xff0c;可以简单迅速…

OpenCV高级图形用户界面(12)用于更改指定窗口的大小函数resizeWindow()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::resizeWindow() 函数用于更改指定窗口的大小。这使得你可以根据需要调整窗口的宽度和高度。 注释 指定的窗口大小是指图像区域的大小。工具栏…

基于Java语言的培训平台+学习平台+在线学习培训系统+教育平台+教育学习系统+课程学习平台

简述 企业培训平台企业考试系统培训平台考试系统企业大学企业视频网站视频学习平台 介绍 企业培训平台支持企业培训考试全流程&#xff0c;在线学习、在线考试&#xff0c;成熟的企业培训考试解决方案&#xff0c;充分满足企业培训需求。 独立部署&#xff0c;仅内部员工登录…

Java 异步编程——常用线程池 ThreadPoolExecutor

文章目录 ThreadPoolExecutor核心参数详解线程池的处理流程线程池中使用的阻塞队列4 种任务拒绝策略4 种不同的线程池线程池的五种状态 Future 接口 ThreadPoolExecutor java.uitl.concurrent.ThreadPoolExecutor 类是线程池中最核心的一个类。 线程池底层示例图&#xff1a;…

代码随想录算法训练营第十六天|513. 找树左下角的值 112. 路径总和 106. 从中序与后序遍历序列构造二叉树

513. 找树左下角的值 题目 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 题目解析---迭代法 层序遍历&#xff0c;然后只需要记录最后一行第一个节点的数值就可…

xtu oj 原根

文章目录 回顾杂思路c 语言代码 回顾 AB III问题 H: 三角数问题 G: 3个数等式 数组下标查询&#xff0c;降低时间复杂度1405 问题 E: 世界杯xtu 数码串xtu oj 神经网络xtu oj 1167 逆序数&#xff08;大数据&#xff09; 杂 有一些题可能是往年的程设的题&#xff0c;现在搬到…

001 Hadoop安装、Spring整合测试

Hadoop安装、整合测试 文章目录 Hadoop安装、整合测试1.简介1.优点2.组成 2.安装1.安装jdk&#xff08;如已安装可跳过&#xff09;2.安装hadoop1.安装2. 修改配置文件core-site.xml3. 修改配置文件hdfs-site.xml4.启动hadoop5.启动yarn6.执行jps查看7.相关端口及配置位置8.访问…

Zilliz获Forrester报告全球第一;OB支持向量能力;Azure发布DiskANN;阿里云PG发布内置分析引擎

重要更新 1. Azure发布PostgreSQL向量索引扩展DiskANN&#xff0c;声称在构建HNSW/IVFFlat索引上&#xff0c;速度、精准度都超越pg_vector&#xff0c;并解决了pg_vector长期存在的偶发性返回错误结果的问题( [1] )。 2. 阿里云RDS PostgreSQL 发布AP加速引擎&#xff08;rds…

修改MYSQL库的默认字符集和校验规则

修改mysql的默认配置文件my.cnf。 vim /etc/my.cnf 如果没有这个文件就可能在这个路径&#xff1a;/etc/mysql/my.cnf 在 [mysqld] 部分下&#xff0c;添加或修改以下设置&#xff1a; character-set-server [要修改的字符集] collation-server [要修改的校验规则] 保存文…

Git客户端使用之命令行

一、git客户端命令行的使用 1、创建本地用户并绑定ssh-key到gitlab #在本地注册用户,这个用户随便创建它就是与git仓库连接的一个用户&#xff0c;不过最好喝git仓库用户一样有利于区分。 git config --global user.name "wenqiang1" git config --global user.ema…

SpringBoot+Vue+Uniapp智能社区服务小程序系统(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

web 0基础第一节 文本标签

学习web语言 首先推荐安装一个vs code 的软件 这个普及度更广一点 兼容性好 网上有很多下载的教程 这里就直接从 html5 的内容开始说了. 这是一个html文件的基本结构 在vs code 中使用英文的 ! 可快捷设置这样的结构 <!-- --> 是在html写注释的结构 以后的…

【Java数据结构】优先级队列(堆)

【本节目标】 1. 掌握堆的概念及实现 2. 掌握 PriorityQueue 的使用 一. 优先级队列 1 概念 前面学过队列&#xff0c;队列是一种先进先出 (FIFO) 的数据结构 &#xff0c;但有些情况下&#xff0c; 操作的数据可能带有优先级&#xff0c;一般出队 列时&#xff0c;可…

【前端】如何制作一个自己的网页(8)

以下内容接上文。 CSS的出现&#xff0c;使得网页的样式与内容分离开来。 HTML负责网页中有哪些内容&#xff0c;CSS负责以哪种样式来展现这些内容。因此&#xff0c;CSS必须和HTML协同工作&#xff0c;那么如何在HTML中引用CSS呢&#xff1f; CSS的引用方式有三种&#xff1…