Vue组件:动态组件、缓存组件、异步组件

news2024/11/15 13:03:37

1、动态组件

Vue.js 提供了对动态组件的支持。在使用动态组件时,多个组件使用同一挂载点,根据条件在不同组件之间进行动态切换。动态组件通过使用 Vue.js 中的 <component>元素,动态绑定到该元素的 is 属性,根据 is 属性的值来判断使用哪个组件。

语法格式如下:

<!-- 动态组件 -->
<component :is="componentName"></component>

动态组件经常应用在路由控制或选项卡切换中。下面通过一个切换选项卡的实例来说明动态组件的基本用法。

【实例】动态组件的基本用法。

(1)创建 ComponentA.vue 组件

<template>
    <fieldset>
        <legend>组件A</legend>
        <p>博客信息:{{ blogName }}</p>
        <p>博客地址:{{ blogUrl }}</p>
    </fieldset>
</template>

<script>
export default {
    data() {
        return {
            blogName: '您好,欢迎访问 pan_junbiao的博客',
            blogUrl: 'https://blog.csdn.net/pan_junbiao'
        }
    }
}
</script>

(2)创建 ComponentB.vue 组件

<template>
    <fieldset>
        <legend>组件B</legend>
        <p>用户名称:<input type="text" v-model="userModel.userName" /></p>
        <p>用户年龄:<input type="number" v-model="userModel.age" /></p>
        <p>用户性别:<input id="male" type="radio" value="1" v-model="userModel.sex" />
            <label for="male">男</label>
            <input id="female" type="radio" value="2" v-model="userModel.sex" />
            <label for="female">女</label>
        </p>
        <button @click="loadData">加载数据</button>
    </fieldset>
</template>

<script>
export default {
    data() {
        return {
            userModel: {
                userName: '',
                age: 0,
                sex: 2
            }
        }
    },
    methods: {
        loadData: function () {
            this.userModel.userName = 'pan_junbiao的博客';
            this.userModel.age = 36;
            this.userModel.sex = 1;
        }
    }
}
</script>

<style scoped>
.b_text {
    width: 300px;
    padding: 3px;
    font-size: 16px;
}
</style>

(3)在 App.vue 根组件中引入两个组件,并实现切换功能

<template>
  <button :disabled="active" @click="trigger('ComponentA')">组件 A</button>
  <button :disabled="!active" @click="trigger('ComponentB')">组件 B</button>
  <!-- 第三步:使用动态组件 -->
  <component :is="componentName"></component>
</template>

<script>
//第一步:引用组件
import ComponentA from '@/components/ComponentA.vue';
import ComponentB from '@/components/ComponentB.vue';

export default {
  data() {
    return {
      componentName: 'ComponentA',
      active: true
    }
  },
  //第二步:注册组件
  components: {
    ComponentA,
    ComponentB
  },
  methods: {
    //切换组件
    trigger: function (componentName) {
      this.componentName = componentName;
      this.active = !this.active;
    }
  }
}
</script>

<style>
button {
  font-size: 16px;
  padding: 5px 20px;
  margin: 0px 10px 10px 0px;
}
</style>

执行结果:

(1)切换组件A效果:

(2)切换组件B效果:

2、缓存组件

在多个组件之间进行切换的时候,有时需要保持这些组件的状态,将切换后的状态保留在内存中,以避免重复渲染。为了解决这个问题,可以用一个 <keep-alive> 元素将动态组件包含起来。

语法格式如下:

<!-- 缓存组件 -->
<keep-alive>
	<component :is="componentName"></component>
</keep-alive>

【实例】实现选项卡内容的缓存效果。

修改 App.vue 根组件中引入两个组件,并使用  <keep-alive> 元素实现组件内容的缓存效果。

<template>
  <button :disabled="active" @click="trigger('ComponentA')">组件 A</button>
  <button :disabled="!active" @click="trigger('ComponentB')">组件 B</button>
  <!-- 第三步:使用缓存组件 -->
  <keep-alive>
    <component :is="componentName"></component>
  </keep-alive>
</template>

执行结果:

3、异步组件

异步组件是Vue.js中的另一个重要特性,它允许你定义一个组件,但不是立即加载它,而是在需要时才加载。这种机制对于构建大型应用程序尤其有用,因为它可以帮助减少应用程序的初始加载时间,提高性能。异步组件通过动态导入模块来实现,这使得组件的加载成为异步操作。

语法格式如下:

// 第一步:导入 defineAsyncComponent 函数
import { defineAsyncComponent } from 'vue'

// 第二步:定义异步组件
const ComponentB = defineAsyncComponent(() => import('@/components/ComponentB.vue'));

【实例】使用异步组件。

修改 App.vue 根组件中引入两个组件,其中组件B使用异步组件。

<template>
  <button :disabled="active" @click="trigger('ComponentA')">组件 A</button>
  <button :disabled="!active" @click="trigger('ComponentB')">组件 B</button>
  <!-- 第三步:使用缓存组件 -->
  <keep-alive>
    <component :is="componentName"></component>
  </keep-alive>
</template>

<script>
// 导入 defineAsyncComponent 函数
import { defineAsyncComponent } from 'vue'

//第一步:引用组件
import ComponentA from '@/components/ComponentA.vue';
//import ComponentB from '@/components/ComponentB.vue';

// 核心代码:定义异步组件
const ComponentB = defineAsyncComponent(() => import('@/components/ComponentB.vue'));

export default {
  data() {
    return {
      componentName: 'ComponentA',
      active: true
    }
  },
  //第二步:注册组件
  components: {
    ComponentA,
    ComponentB
  },
  methods: {
    //切换组件
    trigger: function (componentName) {
      this.componentName = componentName;
      this.active = !this.active;
    }
  }
}
</script>

<style>
button {
  font-size: 16px;
  padding: 5px 20px;
  margin: 0px 10px 10px 0px;
}
</style>

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

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

相关文章

通过LDAP方式使用windows域认证

关于Windows的域认证, 网上大多都再介绍原理啥的, 但是对于从来没有做过.net的我来说, 和看天书一样. 我把我做的demo提供出来共大家参考. 需要参考的文章,参照如下 Windows下LDAP服务安装与使用_windows ldap-CSDN博客 OpenLDAP管理工具之LDAP Admin-腾讯云开发者社区-腾讯云…

计算机基础知识-3

机器周期的时钟周期&#xff0c;或者是cpu时钟周期&#xff0c;就是系统的主频&#xff0c;&#xff0c;根据主频的频率产生脉冲信号。一条指令的执行分为取指和执行&#xff0c;不同指令的取指和执行锁需要的时间也可能是不同的。 每个指令的机器周期可能不同&#xff0c;每个…

Centos镜像详细下载思路总结:包括阿里云镜像下载和官方地址下载--centos7和centos8 镜像下载

Centos镜像详细下载思路总结&#xff1a;包括阿里云镜像下载和官方地址下载。 系统镜像下载&#xff1a; 阿里云镜像&#xff1a; centos-vault安装包下载_开源镜像站-阿里云 官方网址&#xff1a; https://vault.centos.org/7.6.1810/isos/ 系统相关依赖包下载&#xff1a…

某里228滑块逆向分析

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关。 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除! 前言 这次会简单的讲解…

【Web】XGCTF 西瓜杯 超详细题解

目录 CodeInject tpdoor easy_polluted Ezzz_php CodeInject eval里打代码注入 11);system("tac /0*");// tpdoor 可以传参isCache给../../config/route.php写入$config[request_cache_key] 打的是CheckRequestCache中间件解析的漏洞 think\middleware\Ch…

智能客服 | AI助理与内部知识库如何优化用户体验

在数字化转型的浪潮中&#xff0c;客户服务作为企业与客户之间的关键触点&#xff0c;其重要性不言而喻。随着人工智能技术的日益成熟&#xff0c;AI助理与企业知识库的深度融合正在重新定义客户服务的边界&#xff0c;为用户带来前所未有的便捷与个性化体验。 一、AI助理&…

5款翻译工具,告别百度在线翻译!

作为一个经常需要处理多语言文件的小编&#xff0c;我深知翻译工具的重要性。今天&#xff0c;我就来和大家聊聊几款市面上比较热门的翻译工具&#xff0c;一起来看看这几款翻译软件怎么样吧。 1、福昕在线翻译 网址&#xff1a;https://fanyi.pdf365.cn/doc 我发现它的界面简…

OpenCV结构分析与形状描述符(14)拟合直线函数fitLine()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 拟合一条直线到2D或3D点集。 fitLine 函数通过最小化 ∑ i ρ ( r i ) \sum_i \rho(r_i) ∑i​ρ(ri​)来拟合一条直线到2D或3D点集&#xff0c…

什么是过压保护?常见的过压保护元器件有哪些?

在现代电子设备的设计和制造过程中&#xff0c;过压保护是至关重要的一个环节。过电压可能会导致电路板上的元器件损坏或系统故障&#xff0c;因此使用合适的#过压保护元器件#至关重要。 1. 什么是过压保护&#xff1f; 过压保护是一种电子和电气系统中的安全措施&#xff0c…

搭建Eureka高可用集群 - day03

全部代码发出来了 搭建服务提供者 步骤&#xff1a; 1.创建项目&#xff0c;引入依赖 2.添加Eureka相关配置 3.添加EnableEurekaClient注解 4.测试运行 步骤1&#xff1a;创建项目&#xff0c;引入依赖 使用Spring Initializr方式创建一个名称为eureka-provider的Sprin…

Git 撤销commit

上一篇&#xff0c;Git撤销add&#xff0c;其实已经讲了用reset命令可以取消commit&#xff0c;这里再啰嗦下。先看&#xff1a; git如何撤回已经commit • Worktile社区 首先明确一点&#xff0c;无论是commit还是撤销commit&#xff0c;都是在本地暂存区操作&#xff0c;而…

HTML5中IndexedDB前端本地数据库

一、indexedDB为何替代了Web SQL Database&#xff1f; 跟小朋友的教育从来没有什么“赢在起跑线”这种说法一样&#xff0c;在前端领域&#xff0c;也不是哪来先出来哪个就在日后引领风骚的。 HTML5 indexedDB和Web SQL Database都是本地数据库数据存储&#xff0c;Web SQL Da…

陶建辉演讲干货分享,AI 时代下的数据预测和数据处理挑战

在 7 月 26 日的 TDengine 用户大会上&#xff0c;涛思数据&#xff08;TDengine&#xff09;创始人&CEO 陶建辉进行了题为《TDengine 助你决胜 AI 时代》的主题演讲。他不仅分享了 TDengine 的全面技术创新&#xff0c;还深入阐释了打造 TDengine AI 大语言模型插件 TDgpt…

浙大数据结构:02-线性结构3 Reversing Linked List

数据结构MOOC PTA习题 这道题也是相当费事&#xff0c;不过比上一个题好一些&#xff0c;这里我使用了C的STL库&#xff0c;使得代码量大幅减少。 题干机翻&#xff1a; 1、条件准备 这里我准备采用map来存地址和值&#xff0c;因为map的查找效率也是不错的 数组arr是存链…

新手入门Python:魔法函数详解与应用

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 什么是魔法函数?📝 基础魔法函数📝 运算符重载📝 高级魔法函数📝 综合应用示例⚓️ 相关链接 ⚓️📖 介绍 📖 在Python编程的世界里,有一类特别的函数,它们看似普通,却拥有神奇的力量。这些函…

Word文档的读入【2】

现在&#xff0c;乔老师已经了解了Word文档的基本结构。 下面&#xff0c;我们通过观察一份答题卡来思考一下每条信息的具体位置。这样&#xff0c;在后面几天的学习和操作中&#xff0c;我们就能更快、更准确地读取到答题卡中的信息。 这份答题卡是由一个表格和一些段落组成。…

使用API有效率地管理Dynadot域名,查看某一订单当前的状态

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

完美解决下载安装pytorch cuda版本超级慢的问题

问题描述 最近使用pytorch官网安装pytorch cuda版本的命令安装&#xff0c;使用的是官方的镜像源&#xff0c;速度非常慢&#xff0c;通常只有200KB/s&#xff1b;记得以前安装的时候速度可以达到10M/s&#xff0c;不知道最近是不是对国内限速了。 尝试更换成国内镜像源&…

Maven常用标签及作用

Maven常用标签及作用 Maven常用标签及作用parent标签 dependencies和dependencyManagement&#xff0c;以及两者的区别dependencies标签dependencyManagement标签packaging标签 Maven常用标签及作用 parent标签 依赖管理&#xff1a;父POM可以定义一组共享的依赖项(dependenc…

m3u8网页视频文件爬取与视频合成

文章目录 m3u8网页视频文件爬取与视频合成下载m3u8文件下载m3u8文件列表所对应的ts文件下载ffmpeg m3u8网页视频文件爬取与视频合成 我们经常在网络上找到的自己想要的视频素材却无法下载&#xff0c;并且打开控制台一看视频是通过分割成一份份的.ts文件发送过来的。 下载m3u8…