插槽 slot

news/2025/2/13 23:07:16/

文章目录

  • 一、什么是插槽
  • 二、插槽内容
  • 三、渲染作用域
  • 四、默认内容
  • 五、具名插槽
  • 六、作用域插槽

一、什么是插槽

我们使用 <slot> 作为一个占位符,父组件就可以把要传递的内容显示到占位符所在位置上,提高组件使用的灵活性

二、插槽内容

父组件向子组件传递一些模板片段,让子组件在它们的组件中渲染这些片段。

例:

<!-- 父组件 -->
<FancyButton><!-- 插槽内容 -->click me
</FancyButton><!-- 子组件 -->
<button class="fancy-btn"><!-- 插槽出口 --><slot></slot> 
</button>

渲染结果:

<button class="fancy-btn">Click me!</button>

解释: <slot> 元素是一个插槽出口 (slot outlet),标示了父组件提供的插槽内容 (slot content) 将在哪里被渲染。

原理图:

在这里插入图片描述

三、渲染作用域

插槽内容可以访问到父组件的数据作用域,因为插槽内容本身是在父组件模板中定义的。

例:


<!-- message 是父组件的数据 -->
<FancyButton>{{ message }}</FancyButton>

解释: 父组件模板中的表达式只能访问父组件的作用域;子组件模板中的表达式只能访问子组件的作用域

四、默认内容

在外部没有提供任何内容的情况下,可以为插槽指定默认内容。

例:

<!-- 父组件 -->
<SubmitButton /><!-- 子组件 -->
<button type="submit"><slot><!-- 默认内容 -->Submit </slot>
</button>

渲染结果:


<button type="submit">Submit</button>

五、具名插槽

<slot> 元素可以有一个特殊的 attribute name,用来给各个插槽分配唯一的 ID,以确定每一处要渲染的内容:

例:

<!-- 子组件 -->
<div class="container"><header><slot name="header"></slot></header><main><slot></slot></main><footer><slot name="footer"></slot></footer>
</div><!-- 父组件 -->
<BaseLayout><template #header><h1>Here might be a page title</h1></template><template #default><p>A paragraph for the main content.</p><p>And another one.</p></template><template #footer><p>Here's some contact info</p></template>
</BaseLayout>

解释: 这类带 name 的插槽被称为具名插槽 (named slots)没有提供 name<slot> 出口会隐式地命名为“default”v-slot 有对应的简写 #,因此 <template v-slot:header> 可以简写为 <template #header>,其意思就是“将这部分模板片段传入子组件的 header 插槽中”。

原理图:

在这里插入图片描述

六、作用域插槽

父组件设置的插槽的内容需要用到子组件域内的数据。要做到这一点,我们需要让子组件在渲染时将一部分数据提供给插槽。

例:

<!-- 子组件 -->
<div><slot :text="greetingMessage" :count="1"></slot>
</div><!-- 父组件 -->
<MyComponent v-slot="slotProps">{{ slotProps.text }} {{ slotProps.count }}
</MyComponent>

解释: 子组件传入插槽的 props 作为 v-slot 指令的值,可以在插槽内的表达式中访问。

原理图:

在这里插入图片描述


http://www.ppmy.cn/news/10668.html

相关文章

链表算法-回文结构、两个链表公共节点

最近一直在刷算法&#xff0c;以前没有重视这块&#xff0c;偶然巧合下&#xff0c;想到了某几次的面试&#xff0c;虽然没有以这个为主&#xff0c;但是也都有问过算法的题&#xff0c;因为没有这方面的积累&#xff0c;所以心底里一直抗拒&#xff0c;最近也有时间&#xff0…

Make RepVGG Greater Again | 中文翻译

性能和推理速度之间的权衡对于实际应用至关重要。而重参化可以让模型获得了更好的性能平衡&#xff0c;这也促使它正在成为现代卷积神经网络中越来越流行的架构。尽管如此&#xff0c;当需要INT8推断时&#xff0c;其量化性能通常太差&#xff0c;无法部署&#xff08;例如Imag…

数字IC设计学习比较实用的资料推荐

!!!!!!!!!!!!!!!!!!!!!! 审核麻烦看一下,无下载,只是推荐书单。谢谢 !!!!!!!!!!!!!!!!!!!!!! 0 引言 数字IC设计或者FPGA在笔试、或者面试中的基础知识提问环节,考察的知识点范围还是比较广的,个人整理主要包括: 基本的V…

酷开系统——家庭场景下的智能营销系统!

随着人们生活方式的改变&#xff0c;以往传统的营销资源和渠道正在慢慢陷入一个“无用”的尴尬境地&#xff0c;而作为家庭娱乐中心的智能大屏&#xff0c;近两年所表现出来的数据和效果却逐渐备受企业和品牌方关注&#xff0c;有数据显示&#xff0c;智能大屏的家庭覆盖规模正…

vue基础

Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0…

QT 学习笔记(十六)

文章目录一、TCP 传文件流程图1. 服务器端流程2. 客户端流程二、TCP 传文件操作实现1. 服务器端2. 客户端3. TCP 传文件实现现象三、服务器端和客户端实现代码1. 主函数 main.c2. 服务器端头文件 serverwidget.h3. 服务器端源文件 serverwidget.cpp4. 客户端头文件 clientwidge…

如何用智能地教狗狗上厕所

背景 22年养了一只很可爱的小狗狗&#xff0c;我其实就一个问题&#xff1a;为啥这么可爱的狗狗会拉屎撒尿呀&#xff1f; 自从崽崽来了我们家之后&#xff0c;最让我们头疼的就是它乱拉、乱尿的问题了&#xff0c;以前会在家里到处乱来&#xff0c;最近一段时间好了很多&…

自动化测试Seleniums~1

一.什么是自动化测试 1.自动化测试介绍 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或者系统&#xff0c;预设条件包括正常和异常&#xff0c;最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。 将测试人员双手解放&#xff0c;将部分测…