九、动态组件与插槽

news2024/11/16 3:14:42

一、动态组件

1.1、什么是动态组件

动态组件指的是动态切换组件的显示与隐藏

1.2、如何实现动态组件渲染

vue提供了一个内置的<component>组件,专门用来实现动态组件的渲染。示例代码如下:

data() {
  // 1. 当前要渲染的组件名称
  return {
    comName: 'Left'
  }
}
<!-- 2. 通过 is 属性,动态制定要渲染的组件 -->
<component :is="comName"></component>

<!-- 3. 点击按钮,动态切换组件的名称 -->
<button @click="comName = 'Left'"> 展示 Left 组件</button>
<button @click="comName = 'Right'"> 展示 Right 组件</button>

案例:
App.vue

<template>
  <div class="app-container">
    <h1>App 根组件</h1>
    <hr />
    <button @click="comName = 'Left'">展示Left</button>
    <button @click="comName = 'Right'">展示Right</button>
    <div class="box">
      <!-- 渲染 Left 组件和 Right 组件 -->
      <!-- 1. component 标签是 vue 内置的,作用:组件的占位符 -->
      <!-- 2. is 属性的值,表示要渲染的组件的名字 -->
      <!-- 3. is 属性的值,应该是组件在 components 节点下的注册名称 -->
      <component :is="comName"></component>
    </div>
  </div>
</template>

<script>
import Left from '@/components/Left.vue'
import Right from '@/components/Right.vue'
export default {
  data(){
    return {
      // comName 表示要展示的组件的名字
      comName: 'Left'
    }
  },
  components: {
    Left,
    Right
  }
}
</script>

<style lang="less">
.app-container {
  padding: 1px 20px 20px;
  background-color: #efefef;
}
.box {
  display: flex;
}
</style>

Left.vue

<template>
  <div class="left-container">
    <h3>Left 组件 --- {{ count }}</h3>
    <button @click="count += 1">+1</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      count: 0
    }
  },
  created() {
    console.log('Left 组件被创建了!')
  },
  destroyed() {
    console.log('Left 组件被销毁了!')
  }
}
</script>

<style lang="less">
.left-container {
  padding: 0 20px 20px;
  background-color: orange;
  min-height: 250px;
  flex: 1;
}
</style>

在这里插入图片描述在这里插入图片描述在这里插入图片描述

1.3、使用keep-alive保持状态

默认情况下,切换动态组件时无法保持组件的状态。此时可以使用 vue 内置的 <keep-alive> 组件保持动态组件的状态。示例代码如下:

<keep-alive>
	<component :is="comName"></component>
</keep-alive>

在这里插入图片描述在这里插入图片描述在这里插入图片描述

1.4、keep-alive 对应的生命周期函数

当组件被缓存时,会自动触发组件的 deactivated生命周期函数。
当组件被激活时,会自动触发组件的activated生命周期函数。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

1.5、keep–alive的include属性

include属性用来指定:只有名称匹配的组件会被缓存。多个组件名之间使用英文的逗号分隔:

<keep-alive includ="MyLeft,MyRight">
	<component :is="comName"></component>
</keep-alive>

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

二、插槽

2.1、什么是插槽

插槽Slot)是 vue 为组件的封装者提供的能力。允许开发者在封装组件时,把不确定的希望由用户指定的部分定义为插槽。
在这里插入图片描述
可以把插槽认为是组件封装期间,为用户预留的内容的占位符

2.2、体验插槽的基础用法

在封装组件时,可以通过<slot>元素定义插槽,从而为用户预留内容占位符。示例代码如下:

<template>
  <p>这是 MyCom1 组件的第 1 个 p 标签</p>
  <!-- 通过 slot 标签,为用户预留内容占位符(插槽) -->
  <slot></slot>
  <p>这个 MyCom1 组件的最后一个 p 标签</p>
</template>
<my-com-1>
  <!-- 在使用 MyCom1 组件时,为插槽指定具体的内容 -->
  <p>~~~用户自定义的内容~~~</p>
</my-com-1>

在这里插入图片描述在这里插入图片描述

2.2.1、没有预留插槽的内容会被丢弃

如果在封装组件时没有预留任何<slot>插槽,则用户提供的任何自定义内容会被丢弃。示例代码如下:

<template>
  <p>这是 MyCom1 组件的第 1 个 p 标签</p>
  <!-- 封装组件时,没有预留任何插槽 -->
  <p>这个 MyCom1 组件的最后一个 p 标签</p>
</template>
<my-com-1>
  <!-- 自定义的内容会被丢弃 -->
  <p>~~~用户自定义的内容~~~</p>
</my-com-1>

在这里插入图片描述在这里插入图片描述

2.2.2、后备内容

封装组件时,可以为预留的 <slot>插槽提供后备内容(默认内容)。如果组件的使用者没有为插槽提供任何内容,则后备内容会生效。示例代码如下:

<template>
  <p>这是 MyCom1 组件的第 1 个 p 标签</p>
  <slot>这是后备内容</slot>
  <p>这个 MyCom1 组件的最后一个 p 标签</p>
</template>

在这里插入图片描述在这里插入图片描述

2.3、具名插槽

如果在封装组件时需要预留多个插槽节点,则需要为每个<slot>插槽指定具体的name名称。这种带有具体名称的插槽叫做“具名插槽”。示例代码如下:

<div class="app-container">
   <header>
     <!-- 我们希望把页头放这里 -->
     <slot name="header"></slot>
   </header>
   <main>
     <!-- 我们希望把主要内容放这里 -->
     <slot></slot>
   </main>
   <footer>
     <!-- 我们希望把页脚放这里 -->
     <slot name="footer"></slot>
   </footer>
 </div>

2.3.1、为具名插槽提供内容

在向具名插槽提供内容的时候,我们可以在一个<template>元素上使用v-slot指令,并以v-slot的参数的形式提供其名称。示例代码如下:

<my-com-2>
  <template v-slot:header>
    <h1>滕王阁序</h1>
  </template>
  <template v-slot:default>
    <p>豫章故郡,洪都新府</p>
    <p>星分翼轸,地接衡庐</p>
    <p>襟三江而带五湖,控蛮荆而引瓯越</p>
  </template>
  <template v-slot:footer>
    <p>落款:王勃</p>
  </template>
</my-com-2>

2.3.2、具名插槽的简写形式

跟 v-on 和 v-bind 一样,v-slot 也有缩写,即把参数之前的所有内容(v-slot:)替换成字符#。例如:v-slot:header可以被重写为#header:

<my-com-2>
  <template #header>
    <h1>滕王阁序</h1>
  </template>
  <template #default>
    <p>豫章故郡,洪都新府</p>
    <p>星分翼轸,地接衡庐</p>
    <p>襟三江而带五湖,控蛮荆而引瓯越</p>
  </template>
  <template #footer>
    <p>落款:王勃</p>
  </template>
</my-com-2>

在这里插入图片描述在这里插入图片描述

2.4、作用域插槽

在封装组件的过程中,可以为预留的<slot>插槽绑定 props 数据,这种带有 props 数据的 <slot>叫做“作用域插槽”。示例代码如下:

<tbody>
	<!-- 下面的 slot 是一个作用域插槽 -->
	<slot v-for="item in list" :user="item"></slot>
</tbody>

2.4.1、使用作用域插槽

可以使用 v-slot:的形式,接收作用域插槽对外提供的数据。示例代码如下:

<my-com-3>
	<!-- 1. 接收作用域插槽对外提供的数据 -->
	<template v-slot:default="scope">
		<tr>
			<!-- 2. 使用作用域插槽的数据-->
			<td>{{scope}}</td>
		</tr>
	</template>
</my-com-3>

在这里插入图片描述在这里插入图片描述

2.4.2、解构插槽 Prop

作用域插槽对外提供的数据对象,可以使用解构赋值简化数据的接收过程。示例代码如下:

<my-com-3>
	<!-- v-slot: 可以简写成 # -->
	<!-- 作用域插槽对外提供的数据对象,可以通过"解构赋值"简化接收的过程 -->
	<template #default="{user}">
		<tr>
			<td>{{user.id}}</td>
			<td>{{user.name}}</td>
			<td>{{user.state}}</td>
		</tr>
	</template>
</my-com-3>

在这里插入图片描述在这里插入图片描述

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

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

相关文章

学习笔记:混沌工程

个人理解&#xff1a; 混沌工程&#xff0c;chaos engineering&#xff0c;找出系统中的脆弱环节的方法学 混沌工程是软件测试和质量保证的一种方法&#xff0c;在黑客入侵之前或系统故障之前使用它来识别漏洞&#xff0c;由于混沌工程测试而做出的改变增加了人们对系统的信心。…

SpringBoot @SessionScope注解和Session的用法解释

参考资料 JSESSIONID是什么SessionScope 解决了不同session下如何生成不同服务实例 目录一. 前期准备二. 被SessionScope作用的类三. 使用被SessionScope作用类的Service四. 效果4.1 用Edge浏览器进入页面4.2 然后用Edge浏览器进入页面4.3 若将CacheHolder类上的SessionScope注…

nginx部署next项目访问日志去重小技巧,next项目资源不计入日志,网站日志统计去除资源请求

next项目访问日志去重小技巧需求提出具体解决方案配置代码需求提出 之前在跟SEO做网站日志分析的时候受到了一部分资源请求数据的影响&#xff0c;统计出来的ip访问次数远远大于实际值&#xff0c;从日志中或者网站控制台看到每个页面都会发送十几个请求&#xff0c;而这些请求…

Qt中使用QWebEngine加载百度离线地图,在特定地点加载个圣诞树

一、前言 2022年圣诞节到来啦&#xff0c;很高兴这次我们又能一起度过~ 遇上圣诞节&#xff0c;正好最近研究了QT中加载百度离线地图&#xff0c;用百度地图API加载个圣诞树&#xff08;主要我想要那个圣诞节特制勋章&#xff09;。 二、创意名 在百度离线地图加载个圣诞树。…

演化博弈、复制动态方程与仿真

本文只整理和总结一下我的理解&#xff0c;文末列出了可供参考的更详细完整的资料。建议先看参考资料[1]&#xff08;博弈论公开课&#xff09;的博弈论课程&#xff0c;可以直接从第11讲开始看。   参考链接[2]是关于演化博弈非常经典的一本书。   参考链接[5]涵盖内容比较…

CSDN文章质量检测系统

想知道你的文章在CSDN中质量如何吗&#xff1f; 你想知道你的CSDN文章到底写得怎么样吗&#xff1f; 你想要获得一个你的系统的CSDN文章评分吗&#xff1f; CSDN质量分数帮你解决这个问题&#xff0c;网址如下&#xff1a; https://www.csdn.net/qc 界面在如下&#xff0c;如果…

XGBoost模型的python实现

文章目录函数介绍实例二分类问题多分类问题作者&#xff1a;李雪茸函数介绍 实现 XGBoost 分类算法使用的是 xgboost 库的 XGBClassifier&#xff0c;具体参数如下&#xff1a; 1、max_depth&#xff1a;给定树的深度&#xff0c;默认为3 2、learning_rate&#xff1a;每一步…

SpringBoot整合TKMyBatis实现增删改查

文章目录什么是TKMybatis&#xff1f;SpringBoot整合TKMybatis实体类注解TKMapper接口如何使用基本增删改操作批量查询和删除批量添加自定义查询条件ExampleExample 条件设置Example 使用什么是TKMybatis&#xff1f; TKMybatis 是基于Mybatis 框架开发的一个工具&#xff0c;…

[4]MQTT协议基础--下

1.QoS服务质量等级 MQTT服务质量(Quality of Service 缩写 QoS)正是用于告知物联网系统&#xff0c;哪些信息是重要信息需要准确无误的传输&#xff0c;而哪些信息不那么重要&#xff0c;即使丢失也没有问题。 MQTT协议有三种服务质量级别&#xff1a; QoS 0 – 最多发一次…

公司jmeter分享

一、数据库压测组件功能说明 1.JDBC Connection Configuration:jdbc连接配置(一个测试计划可以有多个 JDBC Connection) 2.Variable Name for created pool: 创建池的变量名 连接绑定的变量名,JMeter可以使用多个连接,每个连接绑定到不同的变量;通过引用不同的绑定变量…

安全防范语音通知实现方案

语音通知作为一种强提醒的信息通知方式&#xff0c;非常适合使用在安全防范语音通知场景中&#xff0c;可以有效避免用户错过重要信息。那安全防范语音通知怎么实现&#xff1f;这里互亿无线小编为大家做个详细介绍&#xff1a; 一、如何发送安全防范语音通知信息 互亿无线语…

本地事务、分布式事务、CAP 定理与 BASE 理论、分布式事务几种方案、Linux 安装 Seata、Seata的使用-56

一&#xff1a;本地事务 1.1 事务的基本性质 1.数据库事务的几个特性&#xff1a;原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation)和持久性(Durabilily)&#xff0c;简称就是 ACID&#xff1b; 原子性&#xff1a;一系列的操作整体不可拆分&#xf…

LVGL学习笔记8 - 字体

目录 1. 修改默认字体 2. 修改字体 3. 特殊字体 3.1 SUBPX字体 3.2 28像素压缩字体 3.3 16像素希伯来语/阿拉伯语/Perisan字母 3.4 16像素中文字体 3.5 8像素Ascii字体 3.6 16像素Ascii字体 3.7 内置图标 4. 超大字体 5. 编码方式 6. 添加字体 6.1 在线字体转换器 …

【微服务笔记01】微服务组件之Eureka注册中心的介绍及其基础环境的搭建

这篇文章&#xff0c;主要介绍微服务中的注册中心Eureka及其基础环境的搭建【源代码地址】。 目录 一、Eureka注册中心 1.1、什么是注册中心 1.2、注册中心原理 二、搭建Eureka注册中心环境 2.1、创建父工程&#xff0c;引入微服务依赖 2.2、创建Eureka服务端工程 &…

全球公开的DEM数据产品

1 简介 全球公开版地形数据包括&#xff1a;GTOPO30-DEM、ASTER-GDEM、SRTM90、ALOS-AW3D30等&#xff0c;其他的诸如World DEM及ALOS-AW3D (5m分辨率&#xff09;等全球地形数据不能免费获得。 SRTM&#xff1a;由NASA 及国家地理空间情报局NGA采用2000年2月发射的“奋进号”…

word文件损坏打不开如何修复?文件丢失怎么办?

我们日常办公中&#xff0c;经常用到Word文档。但是有时会遇到word文件损坏、无法打开的情况。这时该怎么办&#xff1f;接着往下看&#xff0c;小编在这里就给大家带来Word文件修复的方法&#xff0c;以及Word文件丢失如何恢复的方法&#xff01; 一、Word文件损坏怎么办 部分…

【vsan数据恢复】磁盘离线导致分布式存储瘫痪的数据恢复案例

vsan数据恢复环境&#xff1a; 一组4台服务器搭建vsan集群&#xff1b; 每台服务器配置有2组分别由6块硬盘组成的磁盘阵列&#xff0c;上层是虚拟机文件。 vsan故障&#xff1a; 在运行过程中&#xff0c;某一个节点的一块硬盘离线&#xff0c;vsan安全机制启动&#xff0c;开始…

梦想云图Node.JS服务 ( 最近更新时间:2022-12-30 10:04:50 )

说明 后台提供梦想Node.JS服务&#xff0c;方便调用控件后台功能&#xff0c;Windows服务程序所在目录:Bin\MxDrawServer\Windows&#xff0c;Linux服务程序所在目录:Bin\Linux\MxDrawServer 梦想云图Node.JS服务 &#xff08; 最近更新时间&#xff1a;2022-12-30 10:04:50 …

第三个脚本——时间加速and视频倍速

目录 本文主要内容 granr属性介绍 run-at属性 时间加速原理 视频倍速原理 完整示例 本文主要内容 介绍grant属性&#xff0c;run-at属性以及时间加速&#xff0c;视频倍速原理 granr属性介绍 相关函数四个&#xff1a; GM_setValue GM_getValue GM_listValues GM_del…

json基本使用与简介

一、简介 二、json两种构造结构 三、js解析JSON 1、JSON2解析JSON 2.用eval()方法把JSON字符串转化成JSON对象. 3&#xff0e;使用JSON2中的JSON对象的parser()方法解析JSON字符串 4. 使用JSON2中的JSON对象的stringify ()方法把JSON对象转换成字符串 5、案例 四、Java解…