vue3:插槽、具名插槽、条件插槽、作用域插槽、具名作用域插槽 一次性搞清楚 --- 通俗易懂

1、插槽的使用:

~父组件index.vue:

<h3>我是父组件testSlot</h3>
<!-- 调用子组件alertBox测试插槽 -->
<alertBox></alertBox>
<alertBox>Something good will be happened.
/alertBox>
<br>

~alertBox.vue:

<template><h3>我是子组件alertBox</h3><div class="alert-box"><strong>This is a good news for this week!!!!!</strong><!-- 插槽占位,父组件调用时加入特性数据,展示特定数据 --><slot><!-- 我们使用 <slot> 作为一个占位符,父组件传递进来的内容就会渲染在这里。 --></slot></div>
</template>

效果:

2、封装button组件,通过slot插槽传入按钮名称 

~父组件index.vue:

<div>##################封装button组件,通过slot插槽传入按钮名称 start #############</div><div>调用fancyButton按钮组件</div><br><FancyButton class="fancy-btn">Click me!</FancyButton><FancyButton>提交订单</FancyButton><FancyButton class="examine-btn">提交审核</FancyButton><FancyButton>{{ obj.btn_text }}</FancyButton><br><div>##################封装button组件,通过slot插槽传入按钮名称 end #############</div>
const obj = reactive({productName: 'Fancy',total: 99,sku_id: '10086',btn_text: '去支付'
})
<style lang="less" scoped>.container {h3 {text-align: center;}.fancy-btn {margin-right: 10px;}.examine-btn:hover {background-color: #A802DB;font-size: 16px;}
}</style>

 ~fancyBuuton.vue:

<template><button class="fancu-btn"><slot></slot></button>
</template><script setup>
import { ref, reactive } from 'vue'/*** 封装统一风格的按钮样式* 稍微有不同的可以通过 透传 attribute* “透传 attribute”指的是传递给一个组件,却没有被该组件声明为 props 或 * emits 的 attribute 或者 v-on 事件监听器。最常见的例子就是 class、style 和 id。* 详情看官网:https://cn.vuejs.org/guide/components/attrs.html*/
</script><style scoped>
.fancu-btn {background-color: #42F5E2;border-radius: 25px;font-size: 14px;cursor: pointer;outline: none;
}
</style>

效果:

3、具名插槽

~父组件index.vue:

        <NamedSlots><template #header><h4>Here might be a page title</h4></template><!-- 两种写法效果相同 --><!-- <template #default><p>A paragraph for the main content.</p><p>And another one.</p></template> --><p>A paragraph for the main content.</p><p>And another one.</p><template #footer><h4>底部信息</h4><p>Here's some concat info.</p></template></NamedSlots>

 ~namedSlot.vue:

<template><div class="container"><header><!-- 标题内容放这里 --><slot name="header"></slot></header><main><!-- 主要内容放这里 ——不添加name,是默认插槽--><slot></slot></main><footer><!-- 底部内容放这里 --><slot name="footer"></slot></footer></div>
</template>
<script setup>
import { ref, reactive } from 'vue'
/*** 具名插槽 --- 有时在一个组件中包含多个插槽出口是很有用的。* Named slots* 这类带 name 的插槽被称为具名插槽 (named slots)。没有提供 name 的 <slot> 出口会隐式地命名为“default”。* 要为具名插槽传入内容,我们需要使用一个含 v-slot 指令的 <template> 元素,并将目标插槽的名字传给该指令:* v-slot 有对应的简写 #,因此 <template v-slot:header> 可以简写为 <template #header>。其意思就是“将这部* 分模板片段传入子组件的 header 插槽中”。*/</script>
<style scoped></style>

效果:

 4、条件插槽

~父组件index.vue:

        <div>##################条件插槽 start #############</div><ConditionalSlot><template #header><h4>头部数据</h4></template><template #default><p>主要内容:Here is the content.</p></template><template #footer><em>底部信息:Here is the footer!</em></template></ConditionalSlot><div>##################条件插槽 end #############</div>

conditionalSlot.vue:

<template><div class="card"><div class="card-header"><slot name="header"></slot></div><div class="card-content"><slot /></div><div class="card-footer"><slot name="footer"></slot></div></div>
</template>
<script setup>
import { ref, reactive } from 'vue'
/*** 条件插槽* 有时你需要根据插槽是否存在来渲染某些内容。* 你可以结合使用 $slots 属性与 v-if 来实现。* 在下面的示例中,我们定义了一个卡片组件,它拥有三* 个条件插槽:header、footer 和 default。 当 header、* footer 或 default 存在时,我们希望包装它们以提供额外的样式:* */</script>
<style lang="less" scoped>.card {border: 1px solid black;padding: 0;.card-header {background-color: skyblue;padding: 4px;}.card-content {background-color: pink;padding: 4px;}.card-footer {background-color: lightgray;padding: 4px;}}
</style>

效果:

5、动态插槽名:

       <!-- 动态插槽名动态指令参数在 v-slot 上也是有效的,即可以定义下面这样的动态插槽名: --><!-- <base-layout><template v-slot:[dynamicSlotName]>...</template>可缩写为如下:<template #[dynamicSlotName]>...</template></base-layout> -->

 6、作用域插槽:

~父组件index.vue:

<div>##################作用域插槽 start #############</div><br><!-- 通过v-slot接收传过来的数据 --><scopeSlot v-slot="props">message:{{ props.text }}count:{{ props.count }}</scopeSlot><!-- v-slot="slotProps" 可以类比这里的函数签名,和函数的参数类似,我们也可以在 v-slot 中使用解构:--><scopeSlot v-slot="{ text, count }">解构后的数据:'{{ text }}', 和 '{{ count }}''</scopeSlot><br><div>##################作用域插槽 end #############</div>

scopeSlot.vue:

<template><div class="container"><header><!-- 标题内容放这里 --><slot name="header"></slot></header><main><!-- 主要内容放这里 ——不添加name,是默认插槽--><slot></slot></main><footer><!-- 底部内容放这里 --><slot name="footer"></slot></footer></div>
</template>
<script setup>
import { ref, reactive } from 'vue'
/*** 具名插槽 --- 有时在一个组件中包含多个插槽出口是很有用的。* Named slots* 这类带 name 的插槽被称为具名插槽 (named slots)。没有提供 name 的 <slot> 出口会隐式地命名为“default”。* 要为具名插槽传入内容,我们需要使用一个含 v-slot 指令的 <template> 元素,并将目标插槽的名字传给该指令:* v-slot 有对应的简写 #,因此 <template v-slot:header> 可以简写为 <template #header>。其意思就是“将这部* 分模板片段传入子组件的 header 插槽中”。*/</script>
<style scoped></style>

 效果:

7、具名作用域插槽

~父组件index.vue:

    <div>##################具名作用域插槽 start #############</div><!-- 解构或者通过变量接收参数都可以 --><NamedScopeSlot v-slot:header="{msg}">具名作用域插槽数据:{{ msg }}</NamedScopeSlot><!-- 等同于下面 --><NamedScopeSlot #header="{msg}">具名作用域插槽数据:{{ msg }}</NamedScopeSlot><!-- 注意插槽上的 name 是一个 Vue 特别保留的 attribute,不会作为 props 传递给插槽。因此最终 headerProps 的结果是 { message: 'hello' }。 --><NamedScopeSlot #header="{name, msg}">具名作用域插槽数据:{{ name }} {{ msg }}</NamedScopeSlot><div>##################具名作用域插槽 end #############</div>

namedScopeSlot.vue:

<template><div><!-- 具名作用域插槽 --><slot name="header" msg="Hello, Friday"></slot></div>
</template>
<script setup>
import { ref, reactive } from 'vue'</script>
<style scoped></style>

效果:

以上就是插槽的使用,源码里面有注释说明。 

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

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

相关文章

钓虾馆计时计费怎么用,佳易王钓虾馆钓鱼场计时器工具软件操作教程

钓虾馆计时计费怎么用&#xff0c;佳易王钓虾馆钓鱼场计时器工具软件操作教程 一、前言 以下软件操作教程以&#xff0c;佳易王钓虾馆钓鱼场计时计费软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 可以多种单价计费方式&#xff0c;在系统…

Elasticsearch 认证模拟题 - 4

一、题目 生成快照&#xff0c;或快照生命周期 1.1 考点 快照生命周期&#xff08;最好通过界面化配置&#xff09;创建仓库创建快照 &#xff08;因为这个需要部署共享文件&#xff0c;所以这个我就在虚拟机上简单操作一下&#xff09; 注&#xff1a; 部署共享文件系统可…

【开发利器】使用OpenCV算子工作流高效开发

学习《人工智能应用软件开发》&#xff0c;学会所有OpenCV技能就这么简单&#xff01; 做真正的OpenCV开发者&#xff0c;从入门到入职&#xff0c;一步到位&#xff01; OpenCV实验大师Python SDK 基于OpenCV实验大师v1.02版本提供的Python SDK 实现工作流导出与第三方应用集…

MySql全文索引+Ngram

一、关于Ngram 1.1 什么是ngram MySQL 内置的全文解析器使用单词之间的空格作为分隔符&#xff0c;这对于不使用空格做分隔符的语言是一种限制。为了解决这一限制&#xff0c;MySQL提供了一个支持中文、日文和韩文&#xff08;CJK&#xff09;的ngram全文解析器。ngram 全文解…

Python | R 雌雄配对和鱼仔变异马尔可夫链

&#x1f3af;要点 &#x1f3af;马尔可夫链&#xff1a;&#x1f58a;天气状态马尔可夫链和马尔科夫矩阵 | &#x1f58a;多项式隐马尔可夫模型&#xff0c;及其高斯分布 | &#x1f58a;算法&#xff1a;前向、后向、前向-后向、维特比算法 | &#x1f58a;最大似然学习、特…

图像加雾算法的研究与应用

目录 前言 一、图像加雾 1、基于传统方法的雾图合成 2、基于深度学习的雾图合成 3、基于Lightroom Classic实现软件加雾 4、基于深度图的方法实现加雾 二、开源的数据集 三、参考文章 前言 在去雾任务当中&#xff0c;训练和评估去雾算法需要大量的带有雾霾和无雾霾的…

聊聊几种常见的分布式Session解决方案

highlight: xcode theme: vuepress 问题引入&#xff1a;什么是分布式Session&#xff1f; 分布式 Session 是指在多台服务器之间共享和管理用户的会话数据&#xff0c;使得用户的会话状态能够在不同的服务器上保持一致。这样&#xff0c;无论用户的请求被路由到哪台服务器&…

常见的几种编码方式

常见的编码方式及其特点&#xff1a; 编码方式的设计是为了适应不同的字符集和应用需求&#xff0c;因此它们在表示字符时使用的位数和字节数各不相同 常见编码方式及其位数和字节数 ASCII&#xff08;American Standard Code for Information Interchange&#xff09;&#x…

C#语言进阶(二)—事件 第三篇(事件访问器)

总目录 C# 语法总目录 系列链接 C#语言进阶(二) 事件 第一篇(发布订阅模式) C#语言进阶(二) 事件 第二篇(.net标准事件模型) C#语言进阶(二) 事件 第二篇(事件访问器) 事件 第三篇目录 事件 第三篇3. 事件访问器 事件 第三篇 3. 事件访问器 默认情况下&#xff0c;编…

【Go语言精进之路】构建高效Go程序:掌握变量、常量声明法则与iota在枚举中的奥秘

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 引言一、变量1.1 基础知识1.2 包级变量的声明形式深入解析&#x1f4cc; 声明并同时显式初始化&#x1f4cc; 声明但延迟初始化&#x1f4cc; 声明聚类与就近原则 1.3 局部变量的声明形式深入探讨&#x1f4cc; 延迟初始化的…

你认识nginx吗,nginx是做什么的,nginx可以做什么 --1)nginx介绍

一.Nginx 介绍 Nginx&#xff08;发音同engine x&#xff09;是一个异步框架的 Web 服务器&#xff0c;也可以用作反向代理&#xff0c;负载平衡器 和 HTTP 缓存。该软件由 Igor Sysoev 创建&#xff0c;并于2004年首次公开发布。同名公司成立于2011年&#xff0c;以提供支持。…

PHP:集成Xunsearch生成前端搜索骨架

如果是安装宝塔&#xff0c;我们在集成xunsearch的时候就会比较简单&#xff0c;后面我们在介绍其他的接入方式&#xff1b; 首先我们进入到宝塔管理后台&#xff1a;【软件商店】-【输入xun】-【点击xunsearch】直接安装即可 安装成功之后&#xff0c;会自动在www/server中创…

spdlog日志库源码:全局管理类registry

概述 已经有了用于接收前端用户log消息的类logger&#xff0c;代表log消息的类是log_msg&#xff0c;后端写log消息到目标文件的类sink&#xff0c;格式化log消息为最终字符串的类formatter&#xff0c;解析pattern flag的类pattern_formatter等等。 每次使用时&#xff0c;可…

Forth Python语言:深度解析其四维、五维、六维与七维之奥秘

Forth Python语言&#xff1a;深度解析其四维、五维、六维与七维之奥秘 在编程语言的浩瀚星空中&#xff0c;Forth Python以其独特的魅力与深邃的内涵&#xff0c;吸引着众多探索者的目光。然而&#xff0c;这门语言究竟有何独到之处&#xff1f;本文将从四维、五维、六维和七…

大模型高级 RAG 检索策略:自动合并检索

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

Flutter 中的 CupertinoSliverNavigationBar 小部件:全面指南

Flutter 中的 CupertinoSliverNavigationBar 小部件&#xff1a;全面指南 Flutter 是一个由 Google 开发的跨平台 UI 框架&#xff0c;它允许开发者使用 Dart 语言来构建高性能、美观的移动、Web 和桌面应用。在 Flutter 的丰富组件库中&#xff0c;CupertinoSliverNavigation…

比较3维空间中4个点的不同结构

在4*4*4的3维空间中&#xff0c;取4个点共有635376种可能&#xff0c;有209个结构&#xff0c;继续按旋转对称分类则只有55个不同的结构。如其中的4t12 4个点在同一个平面&#xff0c;有1个点与其中的3个点不在同一行也不在同一列&#xff0c;这样的位置不止一个 这两个结构都是…

Apache Calcite - 自定义数据源适配之访问内存列表

前言 上一篇文章中学习了Calcite基本概念&#xff0c;其中框架的核心能力是通过统一的Sql访问不同来源的数据。这篇文章中将通过一个简单的例子学习如何实现改功能。 最终通过sql来访问Java List中的数据。 准备工作 maven依赖 <dependency><groupId>org.apache…

ubuntu系统下安装mysql的步骤详解

一、下载安装包 下载地址&#xff1a; https://dev.mysql.com/downloads/repo/apt 跳转到这个页面&#xff1a; 直接点击Download。 直接点击最下面的开始下载安装包即可。 二、将安装包下载到ubuntu系统中 先将用户切换成root用户&#xff0c;把下载好的安装包复制到桌面上&…

域名更换服务器的原因

在互联网的运营过程中&#xff0c;域名更换服务器是一个常见的操作&#xff0c;可能是由于业务扩展、性能需求、成本考虑或服务质量等多种因素。然而&#xff0c;这个过程如果处理不当&#xff0c;可能会导致网站访问中断、搜索引擎排名下降或用户体验受损。本文将探讨在域名更…