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

45、Vue 中的动态组件

<component> 是 Vue 中的动态组件,它允许你在同一个位置动态地切换不同的组件。以下从不同方面详细介绍其使用方法:

基本使用

你可以通过 :is 绑定一个变量来指定要渲染的组件。该变量的值可以是组件的名称(字符串)或者组件的构造函数。

vue-component-basicVue 动态组件基本使用

<template>
  <div>
    <button @click="currentComponent = 'ComponentA'">显示组件 A</button>
    <button @click="currentComponent = 'ComponentB'">显示组件 B</button>
    <!-- 使用 :is 绑定 currentComponent 动态渲染组件 -->
    <component :is="currentComponent"></component>
  </div>
</template>

<script>
import ComponentA from './ComponentA.vue';
import ComponentB from './ComponentB.vue';

export default {
  data() {
    return {
      currentComponent: 'ComponentA'
    };
  },
  components: {
    ComponentA,
    ComponentB
  }
};
</script>    

在上述示例中,点击不同的按钮会改变 currentComponent 的值,从而动态地切换要渲染的组件。

传递数据和事件

你可以像使用普通组件一样,向动态组件传递数据和监听事件。

vue-component-props-eventsVue 动态组件传递数据和事件

<template>
  <div>
    <button @click="currentComponent = 'ComponentA'">显示组件 A</button>
    <button @click="currentComponent = 'ComponentB'">显示组件 B</button>
    <!-- 向动态组件传递数据和监听事件 -->
    <component :is="currentComponent" :message="message" @customEvent="handleEvent"></component>
  </div>
</template>

<script>
import ComponentA from './ComponentA.vue';
import ComponentB from './ComponentB.vue';

export default {
  data() {
    return {
      currentComponent: 'ComponentA',
      message: '这是传递的数据'
    };
  },
  components: {
    ComponentA,
    ComponentB
  },
  methods: {
    handleEvent() {
      console.log('接收到自定义事件');
    }
  }
};
</script>    

在这个示例中,message 数据会传递给动态组件,同时监听动态组件触发的 customEvent 事件。

结合 keep-alive 使用

当需要缓存动态组件时,可以结合 keep-alive 使用。

vue-component-keep-aliveVue 动态组件结合 keep-alive 使用

<template>
  <div>
    <button @click="currentComponent = 'ComponentA'">显示组件 A</button>
    <button @click="currentComponent = 'ComponentB'">显示组件 B</button>
    <!-- 使用 keep-alive 缓存动态组件 -->
    <keep-alive>
      <component :is="currentComponent"></component>
    </keep-alive>
  </div>
</template>

<script>
import ComponentA from './ComponentA.vue';
import ComponentB from './ComponentB.vue';

export default {
  data() {
    return {
      currentComponent: 'ComponentA'
    };
  },
  components: {
    ComponentA,
    ComponentB
  }
};
</script>    

使用 keep-alive 包裹动态组件后,组件在切换时不会被销毁,而是被缓存起来,下次再切换到该组件时,直接从缓存中获取,避免了组件的重新创建和销毁。

结合异步组件使用

如果要使用异步组件,可以将异步组件赋值给 :is 绑定的变量。

vue-component-asyncVue 动态组件结合异步组件使用

<template>
  <div>
    <button @click="currentComponent = asyncComponentA">显示异步组件 A</button>
    <button @click="currentComponent = asyncComponentB">显示异步组件 B</button>
    <component :is="currentComponent"></component>
  </div>
</template>

<script>
// 定义异步组件
const asyncComponentA = () => import('./ComponentA.vue');
const asyncComponentB = () => import('./ComponentB.vue');

export default {
  data() {
    return {
      currentComponent: asyncComponentA
    };
  }
};
</script>    

在这个示例中,asyncComponentA 和 asyncComponentB 是异步组件,点击按钮时会动态加载相应的异步组件。

通过以上几种方式,你可以在 Vue 项目中灵活运用 <component> 动态组件来实现不同的功能。

http://www.dtcms.com/a/106841.html

相关文章:

  • 深入理解多线程编程:从基础概念到实战应用
  • 【C++】类和对象(二)
  • 第三章 知识图谱赋能 RAG:构建结构化知识引擎
  • CoT-VLA:视觉-语言-动作模型的视觉思维链推理
  • 软件工程面试题(二十三)
  • Web服务器主动推送技术(SSE)
  • MongoDB 复制集实战
  • 笔记:docker安装(ubuntu 20.04)
  • C# 中充血模型和‌贫血模型
  • 从查重报告入手的精准论文降重秘籍
  • 基于 Spring Cloud 与 Spring Boot 的工程项目管理系统源码:重塑工程管理新范式​
  • 文件实时备份软件PanguFlow
  • zabbix监控网站(nginx、redis、mysql)
  • 在openharmony中编译部署早期vi工具(附带vi工具源码)
  • 生产管理系统如何破解汽车零部件行业追溯难痛点
  • (Kotlin) Android使用DialogX实现iOS风格底部弹窗(带Toggle开关)
  • 算法与数据结构面试题
  • 【硬件视界8】电源供应器(PSU):计算机的“心脏“
  • 洛谷题单3-P5720 【深基4.例4】一尺之棰-python-流程图重构
  • Tomcat 部署 Jenkins.war 详细教程(含常见问题解决)
  • 存储型XSS漏洞解析
  • springBoot统一响应类型3.5.2版本
  • 【橘子大模型】关于PromptTemplate
  • 定制化管理系统与通用管理系统,谁更胜一筹?
  • MySQL的进阶语法7(索引-B+Tree 、Hash、聚集索引 、二级索引(回表查询)、索引的使用及设计原则
  • ES6对函数参数的新设计
  • 贪心算法,其优缺点是什么?
  • 第二篇:系统分析师——1-6章
  • 深入解析 Spring Boot 测试核心注解
  • 使用UDP建立连接,会存在什么问题?