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

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. 总结

相关文章:

vue的动态组件 keep-alive

1. 什么是动态组件 动态组件指的是 动态切换组件的显示与隐藏 2. 如何实现动态组件渲染 vue提供了一个内置的<component>组件&#xff0c;专门用来实现动态组件的渲染。 作用&#xff1a;组件的占位符is的值表示要渲染的组件 示例代码如下&#xff1a; Left.vue的代…...

现代框架开发官网

一、项目背景 维护过 灵犀官网、企业邮官网、免费邮官网 均使用 jquery webpack多页面打包的方式 开发起来较为繁琐 新的官网项目&#xff0c;想使用现代前端框架&#xff0c;但SPA应用不利于SEO 使用SSR方案又依赖运维&#xff0c;增加维护和沟通成本 二、SSG vs 预渲染 S…...

一篇文章快速认识YOLO11 | 关键改进点 | 安装使用 | 模型训练和推理

前言 本文分享YOLO11的关键改进点、性能对比、安装使用、模型训练和推理等内容。 YOLO11 是 Ultralytics 最新的实时目标检测器&#xff0c;凭借更高的精度、速度和效率重新定义了可能性。 除了传统的目标检测外&#xff0c;YOLO11 还支持目标跟踪、实例分割、姿态估计、OBB…...

AtCoder Beginner Contest 375(A,B,C,D,E,F)(大模拟,前缀和,dp,离线处理,Floyd)

比赛链接 AtCoder Beginner Contest 375 A题 代码 #pragma GCC optimize("O2") #pragma GCC optimize("O3") #include <bits/stdc.h> using namespace std; #define int long long const int N 2e5 5, M 1e6 5; const int inf 0x3f3f3f3f3f…...

认识maven

什么是 Maven&#xff1f; Maven 是一个开源的项目管理工具&#xff0c;主要用于 Java 项目的构建、依赖管理和项目生命周期管理。它提供了一种标准的项目结构和管理流程&#xff0c;使得开发人员能够更轻松地管理项目的构建过程&#xff0c;提高代码的可重用性和可维护性。 …...

OSINT技术情报精选·2024年10月第2周

OSINT技术情报精选2024年10月第2周 2024.10.16版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 1、亿欧智库&#xff1a;《2024中国高精定位服务产业白皮书》 报告的主要内容如下&#xff1a; 产业背景&#xff1a;在“北斗”发展态势的…...

中企通信赋能中信戴卡入选工信部颁发的2023年工业互联网试点示范名单

2024年10月17日&#xff0c;北京-随着工业互联网的迅猛发展&#xff0c;网络安全已成为国家关注的重点议题之一。日前&#xff0c;工业和信息化部&#xff08;工信部&#xff09;公布了2023年工业互联网试点示范名单&#xff0c;中企网络通信技术有限公司&#xff08;简称“中企…...

【C语言】函数的声明与定义

函数的声明 用户自定义函数需要在main函数之前进行声明&#xff0c;用分号结尾。 函数的定义 用户自定义函数在main函数之后进行定义&#xff0c;需要写出具体形参的变量名。注意函数的返回值和返回值类型要一一对应。 函数的调用 调用时&#xff0c;直接使用函数名进行调用&am…...

游戏如何应对薅羊毛问题

在大众眼里&#xff0c;“薅羊毛”是指在电商领域&#xff0c;“羊毛党”利用平台、商家的促销规则&#xff0c;低价获取商品和服务的行为。如前不久“小天鹅被一夜薅走7000万”的案例震惊全网。 然而实际上&#xff0c;“薅羊毛”现象不仅存在于电商场景&#xff0c;在游戏中…...

Chromium html<script>对应c++接口定义

<script>&#xff1a;脚本元素 <script> 元素用于嵌入可执行代码或数据&#xff0c;这通常用作嵌入或者引用 JavaScript 代码。<script> 元素也能在其他语言中使用&#xff0c;比如 WebGL 的 GLSL 着色器语言和 JSON。 更多参考&#xff1a;<script>&…...

ollama + fastgpt+m3e本地部署

ollama fastgptm3e本地部署 开启WSL更新wsl安装ubuntu docker下载修改docker镜像源开启WSL integration 安装fastgpt先创建一个文件夹来放置一些配置文件用命令下载fastgpt配置文件用命令下载docker的部署文件 启动容器M3E下载ollama下载oneapi配置登录oneapi配置ollama渠道配…...

Linux执行source /etc/profile命令报错:权限不够问(已解决)

1.问题 明明以root账号登录Linux系统&#xff0c;在终端执行命令source /etc/profile时 显示权限不够 如下图&#xff1a; 2.问题原因 可能在编辑 /etc/profile 这个文件时不小心把开头的 井号 ‘#’ 给删除了 如图&#xff1a; 这里一定要有# 3.解决办法 进入/etc/pro…...

Windows 11开发全解析

Windows 11开发全解析 一、搭建开发环境 在开始Windows 11开发之前&#xff0c;搭建一个高效的开发环境是至关重要的。Windows 11提供了多种工具和框架&#xff0c;可以帮助开发者快速搭建起一个强大的开发环境。 1. Visual Studio 2024 Visual Studio 2024是微软为Windows…...

如何进行数学家式的学习思考?

如何进行数学家式的学习思考&#xff1f; 学生阶段的数学学习是非常重要的&#xff0c;对这一点很少有人质疑。一提起数学学习&#xff0c;一些学生、家长甚至一些教师认为&#xff0c;学生的数学学习往往侧重于掌握基本概念、公式和解题技巧&#xff0c;通过做题来巩固知识和提…...

自定义类型--结构体

目录 1. 结构体类型的声明 1.1结构的声明 1.2 结构体变量的创建和初始化 1.3不完全结构体 1.4结构的⾃引⽤ 2 结构体的内存对齐 2.1offsetof 2.2 对⻬规则 2.3 为什么存在内存对⻬? 2.4修改默认对⻬数 3. 结构体传参 4 结构体实现位段 4.1什么是位段 4.2 位段的内…...

笔试练习day7

目录 OR59 字符串中找出连续最长的数字串题目解析解法(双指针遍历)代码 NC109 岛屿数量题目解析解法代码(dfs)dfs的实现 拼三角题目解析解法(枚举)代码 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &…...

python 爬虫 入门 一、基础工具

目录 一&#xff0c;网页开发者工具的使用 二、通过python发送请求 &#xff08;一&#xff09;、get &#xff08;二&#xff09;、带参数的get &#xff08;三&#xff09;、post 后续&#xff1a;数据解析 一&#xff0c;网页开发者工具的使用 我们可以用 requests 库…...

金融衍生品中的风险对冲策略分析

金融衍生品是现代金融市场中不可或缺的一部分&#xff0c;它们通过标的资产的价格波动为投资者提供了多样的风险管理工具。随着市场的不确定性和复杂性增加&#xff0c;风险对冲成为企业和个人投资者的首要任务。本文将深入探讨金融衍生品中的常见风险对冲策略&#xff0c;分析…...

linux下建立软链接

深度学习训练中经常会遇到数据量庞大或者工程中模型报错太多导致磁盘空间不够&#xff0c;但是又不想修改原来在代码中写的路径&#xff0c;这个时候制作软连接很有作用&#xff0c;把占用量大的目录移到别的空闲磁盘&#xff0c;然后在原来的目录做一个软连接指向那个移到的空…...

MySql数据库left join中添加子查询

user表查询出数据列表&#xff08;多条&#xff0c;如id&#xff09;左连接到order表中的order_agent_id字段&#xff0c;并通过 order_agent_id分组&#xff0c;求和user_order_partner&#xff0c;使用COALESCE()聚合函数对未获取到和值的进行默认赋值&#xff0c;防止查询不…...

redis--过期策略和内存淘汰策略

redis过期策略 1、惰性删除 当客户端尝试访问某个键时&#xff0c;Redis会先检查该键是否设置了过期时间&#xff0c;并判断是否过期。 如果键已过期&#xff0c;则Redis会立即将其删除。这就是惰性删除。 总结&#xff1a;该策略可以最大化的节省CPU资源&#xff0c;却对内存非…...

qt QTableview 左侧 序号 倒序

本文主要在QTableview插入数据的基础上&#xff0c;使左边序号实现倒序&#xff0c;实现如下图所示。 解决办法&#xff1a; QTableview左侧是QHeaderView类构成的&#xff0c;重写QHeaderView的paintSection&#xff0c; 重写序号的文字内容&#xff0c;进而 实现QTableview …...

隧道代理IP如何帮助企业采集数据?

在数字化时代&#xff0c;数据已成为企业决策的重要基石。无论是市场调研、竞品分析&#xff0c;还是用户行为研究&#xff0c;高质量的数据采集都是企业成功的关键。然而&#xff0c;面对复杂的网络环境和日益严格的反爬虫机制&#xff0c;如何高效、稳定地采集数据成为了一个…...

Spring Boot知识管理系统:技术与方法论

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…...

SpringBoot1~~~

目录 快速入门 依赖管理和自动配置 修改自动仲裁/默认版本号 starter场景启动器 自动配置 修改默认扫描包结构 修改默认配置 读取application.properties文件 按需加载原则 容器功能 Configuration Import ​编辑 Conditional ImportResource 配置绑定Configur…...

兼容多家品牌手机的多协议取电快充芯片

随着智能手机的普及和功能不断的增强&#xff0c;电池续航能力成为了用户关注的焦点&#xff0c;为了解决这各问题各大手机厂商推出了手机快充技术&#xff0c;快充协议是快充技术的核心&#xff0c;每家品牌手机都有自己的独家快充协议&#xff0c;如FCP/SCP协议是华为手机的独…...

Java和Python的不同

1. 语法差异 Java: - Java是一种强类型语言&#xff0c;要求在编译时明确变量的数据类型。 - Java代码块由大括号 {} 包围&#xff0c;如方法体、循环和条件语句。 - Java使用分号 ; 作为语句的结束符。 public class HelloWorld {public static void main(String[] args) {S…...

Moshang摩熵医药数据库

摩熵医药数据库是摩熵数科信息公司旗下的一个核心产品&#xff0c;专注于为医药行业提供全面的数据支持和决策服务。该医药数据库整合了中、美、欧、日等全球七十多个主流国家的数10万数据信息源&#xff0c;其中收载的50亿数据体系的覆盖了生物医药全生命周期数据和精细化工全…...

基于web的酒店客房管理系统【附源码】

基于web的酒店客房管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概述 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 用户信息管理 5.2 会员信息管理 5.3 客房信息管理 5.…...

潜水定位通信系统的功能和使用方法_鼎跃安全

潜水定位通信系统是保障潜水安全与作业高效的关键设备。它利用先进的声呐、无线电等技术&#xff0c;可精准定位潜水员位置。在水下能实现潜水员之间以及与水面的双向通信&#xff0c;确保信息及时传递。具备高可靠性和稳定性&#xff0c;即使在复杂水环境中也能正常运行。 一、…...