【Vue3】动态组件的使用

简言

记录下动态组件的使用。
使用场景:多个组件需要来回切换使用时,可以考虑使用动态组件。

<component> 元素

component元素一个用于渲染动态组件或元素的“元组件”。
他有一个必需的属性is,is有以下特点:

  • 当 is 是字符串,它既可以是 HTML 标签名也可以是组件的注册名。
  • 或者,is 也可以直接绑定到组件的定义(组件导入对象)。

要渲染的实际组件由 is prop 决定。

按注册名渲染组件 (选项式 API):

<script>
import Foo from './Foo.vue'
import Bar from './Bar.vue'export default {components: { Foo, Bar },data() {return {view: 'Foo'}}
}
</script><template><component :is="view" />
</template>

按定义渲染组件 (<script setup> 组合式 API):

<script setup>
import Foo from './Foo.vue'
import Bar from './Bar.vue'
</script><template><component :is="Math.random() > 0.5 ? Foo : Bar" />
</template>

渲染 HTML 元素:

<component :is="href ? 'a' : 'span'"></component>

除了is属性之外,它还接收其他属性,他将会传递到要渲染的组件中:

<component :is="RowCom" title="的22" content="你好2222"><template #name><div>这是插槽name</div></template></component><script setup>import RowCom from "@/components/row/rowCom.vue";</script>

搭配KeepAlive

当使用 <component :is=“…”> 来在多个组件间作切换时,被切换掉的组件会被卸载。

相当于v-if …

我们可以通过 <KeepAlive> 组件强制被切换掉的组件仍然保持“存活”的状态。这样被切换后的组件仍然保存激活时的状态。

<template><div class="index"><h1>动态组件is</h1><ol><div>one</div><li>123</li><li is="vue:row-com" title="的2" content="你好2" /></ol><a-button @click="flag = !flag">切换</a-button><keep-alive><component:is="flag ? RowCom1 : RowCom2"v-bind="flag? { title: 'rowcom1', content: '你好2222' }: { title: 'rowcom2', content: '你好22223' }"><template #name><div>这是插槽name</div></template></component></keep-alive></div>
</template>
<script lang="ts" setup>
import { reactive, ref, onMounted } from "vue";
import RowCom1 from "@/components/row/rowCom.vue";
import RowCom2 from "@/components/row/rowCom2.vue";const flag = ref(true);
</script>
<style lang="scss" scoped></style>

在这里插入图片描述

is

当 is attribute 用于原生 HTML 元素时。
你可能需要 Vue 用其组件来替换原生元素,可以在 is attribute 的值中加上 vue: 前缀,这样 Vue 就会把该元素渲染为 Vue 组件:

<table><tr is="vue:my-row-component"></tr>
</table>

像这样他会将my-row-component组件替换tr元素。

不加vue:会认为is是一个普通的属性,

若加了vue:而没找到这个组件,则会解析为自定义元素。

<table><tr is="vue:row-com12"><div>12321年少的</div></tr></table>

在这里插入图片描述

结语

结束了。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024最新软件测试【测试理论+ python 编程 】面试题(内附答案)

一、测试理论 3.1 你们原来项目的测试流程是怎么样的? 我们的测试流程主要有三个阶段&#xff1a;需求了解分析、测试准备、测试执行。 1、需求了解分析阶段 我们的 SE 会把需求文档给我们自己先去了解一到两天这样&#xff0c;之后我们会有一个需求澄清会议&#xff0c; …

ssm017网上花店设计+vue

网上花店的设计与实现 摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关…

如何在Flutter应用中配置ipa Guard进行混淆

在移动应用开发中&#xff0c;保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具&#xff0c;帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆&#xff0c;并提供了相关的操作步骤和注意事项。 &#x1f4dd; 摘要 本…

ChatGPT常用提示词,各行各业如何使用ChatGPT

常规交互提示词&#xff1a; 定义与解释&#xff1a; 请解释XXX术语的含义。阐述一下YYY的概念。 问答模式&#xff1a; 谁是发明了WWW的人&#xff1f;请告诉我太阳系内最大的行星是哪个&#xff1f; 创作类任务&#xff1a; 为我写一首诗&#xff0c;主题是春天的早晨。创作一…

Stream流,线程

文章目录 Stream流思想作用三类方法获取方法单列集合(Collection[List,Set双列集合Map(不能直接获取)数组同一类型元素(Stream中的静态方法) 常见的中间方法终结方法收集方法 Optional类 线程相关概念多线程概念实现方式继承Thread类实现Runnable接口比较 常用方法线程安全产生…

财报解读:首次全年盈利的奈雪的茶,正越来越“接地气”

从2021年6月到2023年底&#xff0c;上市的奈雪的茶用一年半的时间&#xff0c;终于进入了自己的“盈利时代”。 根据奈雪的茶近日披露的财报&#xff0c;2023年&#xff0c;公司营收51.64亿元&#xff0c;同比增长20.3%&#xff1b;经调整净利润2090万元&#xff0c;上年同期亏…

JavaScript库,编写$()和getElementsByClassName()方法

背景: JavaScript库是一组预先编写好的JavaScript代码集合&#xff0c;旨在简化常见的网页开发任务。这些库通常包含了许多函数和方法&#xff0c;可以帮助开发人员处理各种任务&#xff0c;比如DOM操作、事件处理、动画效果、AJAX请求等等。使用JavaScript库可以节省开发时间…

Outlook会议邀请邮件在答复后就不见了

时常会有同事找到我说&#xff0c;Outlook答复会议邀请邮件后收件箱就找不到会议邀请的邮件了。 这其实是Outlook的的一个机制&#xff0c;会把应答后的会议邀请邮件从收件箱自动删除&#xff0c;到已删除的邮件那里就能找到。如果不想要自动删除&#xff0c;改一个设置即可。…

H5类似Word文档输入框小记

最近一个需求在客户端编辑输入超长文本带下划线。 最开始的input、textarea无法像span一样换行pass了。柳暗无天日之际&#xff0c;被投喂了一个contenteditable 。试了一下&#xff0c;嗯... 乌龟看绿豆--对眼了。 div 加上 contenteditable 后便继承了inputEvent 开启输入模…

FreeRTOS第三天

1.GPIO是什么&#xff1f; 通用输入输出接口 2.VCC是什么&#xff1f;VCC通常是多少V&#xff1f; VCC是电源&#xff0c;VCC通常是3.3伏或者5伏 3.FreeRTOS任务有几种状态&#xff0c;分别是什么状态&#xff1f; 四种状态&#xff1a;创建态&#xff0c;运行态&#xff…

cf937Div4E题F题

题目要找到一个长为k的子串,使得x个相同的k相连长度和s相同且对应字符中只能有一个地方对应的字符不同, 那是不是说明s也能分成x段,且最多有一段中的一个字符不同,否则就不满足要求,那我们现在要讨论这个不同的字符在哪,如果在第一段比如sabaa aaaa aaaa aaaa,如果我们取了abaa…

Linux系统下安装jdk与tomcat【linux】

一、yum介绍 linux下的jdk安装以及环境配置&#xff0c;有两种常用方法&#xff1a; 1.使用yum一键安装。 2.手动安装&#xff0c;在Oracle官网下载好需要的jdk版本&#xff0c;上传解压并配置环境。 这里介绍第一种方法&#xff0c;在此之前简单了解下yum。 yum 介绍 yum&…