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

动态组件

有些场景可能会需要在多个组件之间进行来回切换,在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已实现了异步加载

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

登陆提示:不支持你所在的地区,“Openai’s services are not available in your country…”

错误 登陆时提示“openai’s services are not available in your country”&#xff0c; 说明&#xff1a;Openai的服务在你的地区不可用解决&#xff1a;先清理下浏览器缓存&#xff0c;然后更换代理节点&#xff0c;开启全局模式&#xff0c;最好用欧美节点&#xff0c;或…

hyperf 二十一 数据库 模型关系

教程&#xff1a;Hyperf 一 定义关联 根据文档 一对一&#xff1a;Model::hasOne(被关联模型&#xff0c;被关联模型外键&#xff0c;本模型被关联的字段)一对多&#xff1a;Model::hasMany(被关联模型&#xff0c;被关联模型外键&#xff0c;本模型被关联的字段)反向一对多…

Docker 安装 PHP

Docker 安装 PHP 安装 PHP 镜像 方法一、docker pull php 查找 Docker Hub 上的 php 镜像: 可以通过 Sort by 查看其他版本的 php&#xff0c;默认是最新版本 php:latest。 此外&#xff0c;我们还可以用 docker search php 命令来查看可用版本&#xff1a; runoobrunoob:…

【51单片机】数码管的静态与动态显示(含消影)

数码管在现实生活里是非常常见的设备&#xff0c;例如 这些数字的显示都是数码管的应用。 目录 静态数码管&#xff1a;器件介绍&#xff1a;数码管的使用&#xff1a;译码器的使用&#xff1a;缓冲器&#xff1a; 实现原理&#xff1a;完整代码&#xff1a; 动态数码管&#…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-热门帖子推荐显示实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…

WAF攻防相关知识点总结1--信息收集中的WAF触发及解决方案

什么是WAF WAF可以通过对Web应用程序的流量进行过滤和监控&#xff0c;识别并阻止潜在的安全威胁。WAF可以检测Web应用程序中的各种攻击&#xff0c;例如SQL注入、跨站点脚本攻击&#xff08;XSS&#xff09;、跨站请求伪造&#xff08;CSRF&#xff09;等&#xff0c;并采取相…

web前端项目-中国象棋【附源码】

中国象棋 【中国象棋】是一款历史悠久、深受人们喜爱的策略类游戏。在Web前端技术中&#xff0c;我们可以使用HTML、CSS和JavaScript等语言来制作一款中国象棋游戏。玩家使用棋子&#xff08;帅/相/士/炮/马/车/炮/卒&#xff09;在棋盘上相互对弈&#xff0c;将对手的“帅”棋…

python入门,函数的进阶

1.函数的多返回值 加上逗号&#xff0c;一个函数每次就能返回多个值 2.函数的多种参数使用形式 1.位置参数 调用函数时根据参数位置来传递参数 就是我们平时写函数时所使用的形式 注意&#xff1a; 传递的参数和定义的参数的顺序以及个数必须一致 2.关键字参数 通过键值…

【汉诺塔】经典递归问题(Java实现)图文并茂讲解

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢迎各位大佬指点&#…

Mysql 数据库DML 数据操作语言—— 对数据库表中的数据进行更改UPDATE 和删除DELETE

更改数据UPDATE UPDATE 表名&#xff08;注意这里不加TABLE&#xff09; SET 字段名1值1&#xff0c; 字段名2值2&#xff0c;...[where 条件] 示例1&#xff1a;只修改一个字段 示例二&#xff0c;修改name age字段 ; update tt4 set name 丹,age18 where id5;示例三、将所…

k8s---ingress对外服务(traefik)

目录 ingress的证书访问 traefik traefik的部署方式&#xff1a; deamonset deployment nginx-ingress与traefix-ingress相比较 nginx-ingress-controller ui访问 deployment部署 ingress的证书访问 ingress实现https代理访问: 需要证书和密钥 创建证书 密钥 secre…

Android WorkManager入门(二)

WorkManager入门 上一篇前言创建 WorkRequest并提交 定时的任务&#xff08;PeriodicWorkRequest&#xff09;配合约束使用定义执行范围失败后的重试为WorkRequest打上TAG其他取消方法 传参和返回参数总结参考资料 上一篇 Android WorkManager入门&#xff08;一&#xff09; …

【图解数据结构】深度解析时间复杂度与空间复杂度的典型问题

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;图解数据结构、算法模板 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️上期回顾二. ⛳️常见时间复杂度计算举例1️⃣实例一2️⃣实例二3️⃣实例三4️⃣实例四5…

基于R语言的NDVI的Sen-MK趋势检验

本实验拟分析艾比湖地区2010年至2020年间的NDVI数据&#xff0c;数据从MODIS遥感影像中提取的NDVI值&#xff0c;在GEE遥感云平台上将影像数据下载下来。代码如下&#xff1a; import ee import geemap geemap.set_proxy(port7890)# 设置全局网络代理 Map geemap.Map()# 指定…

HCIP-7

IPV6: 为什么使用IPV6&#xff1a; V4地址数量不够V4使用NAT&#xff0c;破坏了端到端原则 IPV6的优点&#xff1a; 全球单播地址聚合性强&#xff08;IANA组织进行合理的分配&#xff09;多宿主----一个接口可以配置N个地址--且这些地址为同一级别自动配置---1&#xff09;…

绝地求生【违规处罚工作公示】1月8日-1月14日

1月8日至1月14日期间&#xff0c;共计对174,636个违规账号进行了封禁&#xff0c;其中164,757个账号因使用外挂被永久封禁。 若您游戏中遇到违规行为&#xff0c;建议您优先在游戏内进行举报&#xff1b; 另外您也可以在官方微信公众号【PUBG国际版】中点击“ 服务中心 - 举报…

Visual Studio 与 SQL Server 常见报错解决方案(工作向)

前言 这篇文章从今天创建开始&#xff0c;会一直更新下去&#xff0c;以后遇到常见但是比较容易解决的报错会在本文进行更新&#xff0c;有需要的朋友可以收藏再看 目录 Visual Studio lc.exe已退出&#xff0c;代码为-1无法导入以下密钥文件xxx.pfx&#xff0c;该密钥文件…

SG-9101CGA(汽车+125°C可编程晶体振荡器)

SG-9101CGA是用于汽车CMOS输出的可编程晶体振荡器&#xff0c;彩用2.5 x 2.0 (mm)封装&#xff0c;0.67 MHz至170 MHz频率范围、工作温度范围为-40℃~125℃&#xff0c;符合车规级晶振&#xff0c;无铅&#xff0c;绿色环保&#xff0c;满足汽车工业标准&#xff0c;电源电压范…

【音视频原理】图像相关概念 ② ( 帧率 | 常见帧率标准 | 码率 | 码率单位 )

文章目录 一、帧率1、帧率简介2、常见帧率标准3、帧率 刷新率 二、码率1、码率简介2、码率单位 一、帧率 1、帧率简介 帧率 Frame Rate , 帧 指的是 是 画面帧 , 帧率 是 画面帧 的 速率 ; 帧率 的 单位是 FPS , Frames Per Second , 是 每秒钟 的 画面帧 个数 ; 帧率 是 动画…

文件共享服务(一)——DAS、NAS、SAN存储类型

一、存储类型 存储类型主要有三种 1. DAS直连式存储 通常由数据线直连电脑就可以用&#xff0c;比如一块新硬盘&#xff0c;只需要利用磁盘模拟器分区&#xff0c;创建文件系统&#xff0c;挂载就可以使用了。 PC中的硬盘或只有一个外部SCSI接口的JBOD存储设备&#xff08;即…