Vue 2 动态组件和异步组件

news2025/1/21 10:11:22

先阅读 【Vue 2 组件基础】中的初步了解动态组件。


动态组件与keep-alive

我们知道动态组件使用is属性和component标签结合来切换不同组件。

下面给出一个示例:

<!DOCTYPE html>
<html>

<head>
    <title>Vue 动态组件</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        <!--  tab 标签页 -->
        <div>
            <button @click="tab = 'home'">首页</button>
            <button @click="tab = 'posts'">文章</button>
        </div>
        父组件count: {{count}}
        <!--  动态组件 -->
        <component :is="tab" @increment="count=$event"></component>
    </div>
    <script>
        //  注册组件
        Vue.component('home', {
            data: function () {
                return {
                    count: 0
                }
            },
            template: 
            `
            <div>
                <div>首页内容</div>
                <div>子组件count: {{count}}</div>
                <button @click="count++;$emit('increment', count)">点击了{{count}}次</button>
            </div>
            `,
        });
        Vue.component('posts', {
            template: '<div>文章内容</div>'
        });
        var vm = new Vue({
            el: '#app',
            data: {
                tab: 'home',
                count: 0
            },
        });
    </script>
</body>

</html>
<script>

在这里插入图片描述

看代码可以知道父组件的count会在子组件count更新后变为子组件的count值。但我们切换组件后再切换回来,会发现父组件count没变,子组件count变为初始值。这是因为,每次切换组件都会创建当前组件的新实例。

那怎么保存先前组件的状态呢?

Vue提供了keep-alive组件。我们使用该元素将要缓存的组件包裹起来。让我们看看效果:

<keep-alive>
    <component :is="tab" @increment="count=$event"></component>
</keep-alive>

在这里插入图片描述

成功解决问题!

了解更多keep-alive组件的细节。


异步组件

异步组件是一种加载组件的方式,它允许我们将组件的加载推迟到需要时再进行,以提高应用程序的性能和加载速度。

我们可以通过不同的方式使用异步组件。

1.工厂函数

使用Vue.component方法来定义一个异步组件工厂函数:

Vue.component('async-component',function(resolve,reject){
    //模拟异步加载,延迟一段时间后解析组件
    setTimeout(function(){
        resolve({
            template:'<div><h2>Async Component Content</h2></div>'
        })
    },1000)
})

使用Vue.component方法结合webpack的code-splitting来定义一个异步组件工厂函数:

Vue.component('async-component',function(resolve,reject){
    //这个特殊的require语法会告诉webpack自动将编译后的异步组件拆分成不同的块
    require('./AsyncComponent.vue',resolve)
})

在上面代码中,async-component是你定义异步组件的名字,后面的工厂函数有两个参数:resolverejectresolve是一个函数,异步加载成功时会调用它。reject则是在异步加载失败时调用。

2.Vue.component+动态导入+webpack 2的代码分割+ES2015的模块语法

Vue.component(
    `async-webpack-example`,
    ()=>import('./my-async-component')
);

()=>import('./my-async-component')返回一个Promise,Vue会根据Promise的状态来自动处理异步加载和渲染的过程

3.局部注册+动态导入

new Vue({
    components:{
        'my-component':()=>import('./my-async-component')
    }
})

处理加载状态

异步组件工厂函数可以返回一个对象,该对象包含有关异步组件加载、加载中、加载失败等情况的配置信息,这种方式允许你更加精细地控制异步组件地加载和渲染过程。下面是这种格式的异步组件配置对象的详细解释:

const AsyncComponent=()=({
    //需要加载的组件
    component:import('./MyComponent.vue'),
    //异步加载时使用的组件
    loading:LoadingComponent,
    //加载失败时使用的组件
    error:ErrorComponent,
    //展示加载时组件的延迟时间,默认值是200(毫秒)
    delay:200,
    // 如果提供了超时时间且组件加载也超时了,
    // 则使用加载失败时使用的组件。默认值是:`Infinity`,即没有超时限制
    timeout: 3000
})

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

夹具、治具、模具零件加工、云MES系统解决方案

夹具、治具、模具零件、自动化零件属于典型的多品种、小批量生产模式&#xff0c;模具零件和自动化零件一般属于单件生产或者散件生产&#xff0c;大部分机械加工企业都有这样的管理困惑&#xff0c;市面上通用的ERP系统和MES系统都无法满足这种多品种小批量、单件加工或散件加…

mysql从传统模式切到GTID模式后启动主从,主从异常报错1236

一 前言 MySQL 的主从复制作为一项高可用特性&#xff0c;用于将主库的数据同步到从库&#xff0c;在维护主从复制数据库集群的时候&#xff0c;作为专职的MySQL DBA&#xff0c;笔者相信大多数人都会遇到“Got fatal error 1236 from master when reading data from binary …

校园跑腿市场行情分析

随着社会的发展和人们生活节奏的加快&#xff0c;校园跑腿市场逐渐兴起并呈现出蓬勃发展的态势。在这个快节奏的时代&#xff0c;越来越多的学生需要在繁忙的学业之外完成各种任务&#xff0c;而校园跑腿服务正是应运而生&#xff0c;为他们提供了便利和时效。本文将从需求方面…

「追风少年」——迈克尔·詹姆斯·欧文要来中国啦!

亚运会前夕&#xff0c;8月23日~25日&#xff0c;世界著名球星迈克尔詹姆斯欧文&#xff08;Michael James Owen&#xff09;将来到杭州和球迷朋友们一起开展签售会以及举办他在中国的直播首秀&#xff0c;届时将有超头部主播加持&#xff0c;享誉世界的「追风少年」将在亚运会…

【vue】项目基础环境搭建、css样式重置与公用

nodejs环境 nodejs是当下前端工程化开发必不可少的环境, 使用 nodejs的 npm功能来管理依赖包 查看node 和 npm的版本 node -v #查看node版本npm -v #查看npm版本 git版本控制 git版本控制工具是目前最为流行的分布式版本管理工具,代码的**提交, 检出, 日志**, 都需要通过git完…

深度分析纳斯达克上市公司慧择的竞争优势和投资价值

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 一、保险行业的现状、竞争与机遇 在疫情期间&#xff0c;很多行业的经营理念与经营方式&#xff0c;甚至客户行为、客户需求都发生了变化&#xff0c;进而催生出新的机遇。保险行业亦是如此&#xff0c;受疫情影响&#xf…

opencv-python使用鼠标点击图片显示该点坐标和像素值IPM逆透视变换车道线二值化处理

OpenCV的鼠标操作 实现获取像素点的功能主要基于OpenCV的内置函数cv2.setMouseCallback()&#xff0c;即鼠标事件回调 setMouseCallback(winname, onMouse,userdata0) winname: 接收鼠标事件的窗口名称 onMouse: 处理鼠标事件的回调函数指针 userdata: 传给回调函数的用户数据…

Google API实战与操作

Google api实战与操作 一. Google API 权限配置二. 操作API2.1 引入依赖2.2 导入代码 Google官网 实现一套用java程序控制GoogleAPI实现自动生成监控日报等功能,具体能操作Gsheet及document 一. Google API 权限配置 打开上面官网,新建项目 启用API 搜索sheet及document …

解决umi.js或dva.js中effect函数发生错误dispatch失效的问题

问题背景 在项目的model文件中&#xff0c;通常在effect中进行网络请求等异步操作&#xff0c;当网络错误或者请求结果错误时&#xff0c;以及代码语法错误时&#xff0c;无论是否主动使用throw语句抛出错误&#xff0c;下一次再调用dispatch访问effect中的函数时&#xff0c;…

GRPC 学习记录

GRPC 安装 安装 grpcio、grpcio-tools、protobuf、 pip install grpcio -i https://pypi.tuna.tsinghua.edu.cn/simple pip install grpcio-tools -i https://pypi.tuna.tsinghua.edu.cn/simple pip install protobuf -i https://pypi.tuna.tsinghua.edu.cn/simple常用类型 p…

Spring系列篇 -- Bean的生命周期

目录 经典面试题目&#xff1a; 一&#xff0c;Bean的生命周期图 二&#xff0c;关于Bean的生命周期流程介绍&#xff1a; 三&#xff0c;Bean的单例与多例模式 总结&#xff1a; 前言&#xff1a;今天小编给大家带来的是关于Spring系列篇中的Bean的生命周期讲解。在了解B…

Wlan安全——认证与加密方式(WPA/WPA2)

目录 终端认证技术 WEP认证 PSK认证 802.1x认证与MAC认证 Portal认证 数据加密技术 WEP加密 TKIP加密 CCMP加密 TKIP和CCMP生成密钥所需要的密钥信息 802.11安全标准 WEP共享密钥认证、加密工作原理 WEP共享密钥认证 WEP加解密过程 PSK认证以及生成动态密钥的工…

allegro更新封装如何操作

1、打开brd文件&#xff0c;然后place->update symbols 2、找到要更新的器件

速卖通、阿里国际站需不需要测评?补单或许能带来意想不到的效果

今天和各位聊聊速卖通和阿里国际站&#xff0c;不管新卖家或者老买家都会遇到的各种问题。 首先聊一下新卖家&#xff0c;新卖家店铺刚开&#xff0c;产品先尽可能的去铺开&#xff0c;把店铺规划好&#xff0c;然后就是坐等开单&#xff0c;前期产品上传上去之后是不是感觉流…

比特币凌晨短线暴跌,17万多头爆仓近10亿美元!原因何在?

凌晨5:30AM左右&#xff0c;加密货币短线暴跌。比特币触及24715美元低点&#xff0c;随后回升至26000美元以上&#xff0c;日内跌幅一度扩大至7%以上。以太坊击穿1500美元&#xff0c;现已回调至1650以上&#xff0c;山寨币也出现集体下跌。 此次下跌使比特币市值自6月16日以来…

Linux系统之安装my-mind思维导图工具

Linux系统之安装my-mind思维导图工具 一、my-mind介绍二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查端口占用情况 四、安装httpd4.1 检查本地yum仓库4.2 安装httpd4.3 关闭防火墙和selinux4.4 创建…

C++之atomic_load与atomic_store原子操作实例(一百八十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

4G电力摄像机如何通过AT指令对接到国网平台呢?

对于针对电网安全运行的迫切需求&#xff0c;”输电线路智能可视化监测系统”被研发并应用&#xff0c;通过视频监控和AI智能分析技术&#xff0c;实现了对输电线路远程视频在线监测、外力破坏智能分析&#xff0c;可实现对输电线路的全天候实时监测和预警&#xff0c;有效保障…

【新知测评实验室】解谜扫描全能王——“智能高清滤镜”黑科技

目录 一、“智能高清滤镜” 原理分析1.1、智能扫描引擎AI-Scan功能拆解1.1.1、**图像感知**1.1.2、场景化决策 1.2、版面还原与识别技术分析1.2.1、元素检测和识别1.2.2、元素聚合1.2.3、版面识别 二、深度测评——“智能高清滤镜”功能2.1、图像处理方面2.2、摩尔纹去除方面2.…

五分钟搭建生鲜蔬果小程序

如今&#xff0c;随着移动互联网的快速发展&#xff0c;小程序已经成为众多企业和商家推广产品和服务的重要工具。而生鲜蔬果行业作为一个常见的消费领域&#xff0c;也开始逐渐转向小程序商城来进行销售和服务。那么&#xff0c;如何从零开始搭建一个生鲜蔬果小程序商城呢&…