VUE组件--动态组件、组件保持存活、异步组件

news/2024/11/25 15:40:16/

动态组件

有些场景可能会需要在多个组件之间进行来回切换,在vue中则使用<component :is="..."> 来实现组件间的来回切换

// App.vue
<template><component :is="tabComponent"></component><button @click="changeHandler">切换组件</button>
</template><script >import Component1 from './components/Component1.vue'import Component2 from './components/Component2.vue'export default {data(){return{tabComponent:"Component1"}},methods:{changeHandler(){this.tabComponent = this.tabComponent == "Component1" ? "Component2" : "Component1"console.log(this.tabComponent)}},components:{Component1,Component2}}
</script>

 changeHandler()使用三目运算符,来实现Component1和Component2之间的相互切换

// Component1.vue
<template><h2>组件1</h2>
</template>
//Component2.vue
<template><h2>组件2</h2>
</template>

 默认为组件1

 

组件保持存活

当组件1切换到组件2时,组件1会被强行销毁

// App.vue
<!--html代码(模块展示 显示在页面上的内容)-->
<template><component :is="tabComponent"></component><button @click="changeHandler">切换组件</button></template><!--vue代码-->
<script >import Component1 from './components/Component1.vue'import Component2 from './components/Component2.vue'export default {data(){return{tabComponent:"Component1"}},methods:{changeHandler(){this.tabComponent = this.tabComponent == "Component1" ? "Component2" : "Component1"console.log("切换至组件:")console.log(this.tabComponent)}},components:{Component1,Component2}}
</script>
// Component1.vue
<template><h2>组件1</h2><p>{{ msg }}</p><button @click="updateHandler">更新数据</button>
</template>
<script>export default {data(){return {msg: "老数据"}},methods:{updateHandler(){this.msg = "新数据"}},beforeUnmount() {console.log("组件1被销毁前")},unmounted() {console.log("组件1被销毁")}}
</script>
// Component2.vue
<template><h2>组件2</h2>
</template>
<script>export default {beforeUnmount() {console.log("组件2被销毁前")},unmounted() {console.log("组件2被销毁")}}
</script>

初始态: 

点击“更新数据”:

点击“切换组件”:

再次点击“切换组件”:

据上面的图可以发现在切换组件的过程中,更改过后的数据又变回老数据,则说明在组件的切换中,发生了组件的销毁及重建,若想要阻止切换组件时组件的销毁发生,可加上<keep-alive> (强制将被切换的组件使之仍然保持存活状态)

//App.vue 中的 template
<template><keep-alive><component :is="tabComponent"></component></keep-alive><button @click="changeHandler">切换组件</button>
</template>

 

 此时,在组件切换的过程中,组件不再被销毁重建


异步组件

当有多个组件存在时,项目的运行时,组件默认会被同步加载

当组件过多时,采用同步加载组件会大大降低运行速度,所以vue提出了异步加载组件的方法:defineAsyncComponent 方法进行实现

 实现组件的切换时,没有出现新的网络请求,则说明组件1和组件2一开始就已经被加载

将组件2的导入方式改为以下形式即可实现异步组件的加载:

// App.vue 中的<script>
import Component1 from './components/Component1.vue'
import {defineAsyncComponent} from "vue"const Component2 = defineAsyncComponent( () =>import("./components/Component2.vue"))

可以发现,此时出现了网络请求,说明Component2已实现了异步加载


http://www.ppmy.cn/news/1326212.html

相关文章

Verilog基础:强度建模(二)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 三、拥有单个强度和确定值的net型信号的线与组合&#xff08;线网多驱动&#xff09; 首先来说明一下什么叫信号拥有单个强度和确定值&#xff0c;其实如果一个ne…

数据分析中常用的指标或方法

一、方差与标准差二、协方差三、皮尔逊系数四、斯皮尔曼系数五、卡方检验六、四分位法和箱线图七、 一、方差与标准差 总体方差 V a r ( x ) σ 2 ∑ i 1 n ( x i − x ˉ ) 2 n ∑ i 1 n x i 2 − n x ˉ 2 n E ( x 2 ) − [ E ( x ) ] 2 Var(x)\sigma^2\frac {\sum\l…

Redis: Redis介绍

文章目录 一、redis介绍二、通用的命令三、数据结构1、字符串类型&#xff08;String&#xff09;&#xff08;1&#xff09;介绍&#xff08;2&#xff09;常用命令&#xff08;3&#xff09;数据结构 2、列表&#xff08;List&#xff09;&#xff08;1&#xff09;介绍&…

02-编程猜谜游戏

本章通过演示如何在实际程序中使用 Rust&#xff0c;你将了解 let 、 match 、方法、关联函数、外部crate等基础知识。 本章将实现一个经典的初学者编程问题&#xff1a;猜谜游戏。 工作原理如下&#xff1a;程序将随机生成一个介于 1 和 100 之间的整数。然后&#xff0c;程序…

渣土车识别摄像机

渣土车识别摄像机是一种应用于城市管理和交通监控领域的先进技术设备。它通过摄像头实时捕捉道路上行驶的车辆画面&#xff0c;并利用先进的图像识别和算法分析技术对渣土车进行准确识别。渣土车识别摄像机的设计需要兼顾高清晰度、高速度、大容量等特点&#xff0c;以满足实际…

分类预测 | Matlab实现ISSA-SVM基于多策略混合改进的麻雀搜索算法优化支持向量机的数据分类预测

分类预测 | Matlab实现ISSA-SVM基于多策略混合改进的麻雀搜索算法优化支持向量机的数据分类预测 目录 分类预测 | Matlab实现ISSA-SVM基于多策略混合改进的麻雀搜索算法优化支持向量机的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 基于多策略混合改进的麻…

JS执行顺序

众所周知&#xff0c;JavaScript 是单线程语言,只能同时执行做一件事(js只有一个线程&#xff0c;称之为main thread-主线程) 1.Javascript 运行机制 main thread 主线程和 call-stack 调用栈(执行栈)&#xff0c;所有的任务都会被放到调用栈等待主线程执行。 2.Javascript 任…

【计算机网络】HTTP协议以及简单的HTTP服务器实现

文章目录 一、HTTP协议1.认识URL2.urlencode和urldecode3.HTTP协议格式4.HTTP的方法5.HTTP的状态码6.HTTP常见Header7.重定向8.长连接9.会话保持10.基本工具 二、简单的HTTP服务器实现1.err.hpp2.log.hpp3.procotol.hpp4.Sock.hpp5.Util.hpp6.httpServer.hpp7.httpServer.cc8.总…