vue3学习之插槽slot

news2025/2/23 3:35:22

关于slot

web组件内部的占位符,可以使用自己的标记填充这个占位符
,具名插槽就是在slot标签上添加name属性(https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/slot)
vue3官方文档:https://cn.vuejs.org/guide/components/slots.html#named-slots

子组件FancyButton

<script setup>
</script>
<template>
  <button class="fancy-btn">
    <slot>
        <!-- 如果父组件没有提供插槽内容的时候就会显示默认值 -->
      submit
    </slot>
  </button>
</template>
<style>
.fancy-btn {
  color: #fff;
  background: linear-gradient(315deg, #42d392 25%, #647eff);
  border: none;
  padding: 5px 10px;
  margin: 5px;
  border-radius: 8px;
  cursor: pointer;
}
</style>

在父组件中引入,并使用

<script setup>
import FancyButton from "./components/FancyButton.vue";
</script>
<template>
  <FancyButton>click me</FancyButton>
  <FancyButton></FancyButton>
</template>

分别显示
在这里插入图片描述
###具名插槽
当一个组件包含多个插件出口时,就需要用到具名插槽即为slot标签添加name属性,没有提供 name 的 出口会隐式地命名为“default”
Layout.vue

<script setup>
</script>
<template>
<div class="container">
    <header>
        <slot name="header"></slot>
    </header>
    <main>
        <slot>

        </slot>
    </main>
    <footer>
        <slot name="footer"></slot>
    </footer>
</div>
</template>

父组件中使用
当一个组件同时接收默认插槽和具名插槽时,所有位于顶级的非 节点都被隐式地视为默认插槽的内容

<script setup>
import Layout from './components/Layout.vue'
</script>
<template>
   <!-- 具名插槽 -->
    <Layout>
      <template v-slot:header>
        <h1>头部插槽内容</h1>
      </template>
      <p>其他内容,就是没有指定插槽名称的会显示在默认插槽里面</p>
      <template #footer>
        底部插槽内容,插槽也可以写成#footer的形式
      </template>
    </Layout>
</template>

在这里插入图片描述

条件插槽

根据插槽是否存在来渲染内容
Card.vue

<script setup>
</script>
<template>
<div class="card">
    <div v-if="$slots.header" class="header">
        <slot name="header"></slot>
    </div>
    <div v-if="$slots.default" class="main">
        <slot></slot>
    </div>
    <div v-if="$slots.footer" class="footer">
        <slot name="footer"></slot>
    </div>
</div>
</template>
<style>
.card{
    border: 1px solid rgb(151, 138, 204);
}
.header{
    color: cornflowerblue;
}
.footer{
    background: darkseagreen;
}
</style>

使用
在使用子组件Card时,除了具名插槽,其他的标签和内容不能写进去

<script setup>
import Card from './components/Card.vue'
</script>
<template>
   <Card>
   
      <!-- <template #header>
      <h1>This is the header</h1>
    </template> header将不显示-->
    
     <!-- <p>默认插槽内容</p> 不能这样写会报错-->
      <template #default>
        <p>This is the content</p>
      </template>

      <template #footer>
        <em>This is the footer</em>
      </template>
    </Card>
</template>

在这里插入图片描述
正常使用的展示
在这里插入图片描述

动态插槽

动态指令参数在 v-slot 上也是有效的,即可以定义下面这样的动态插槽名:

<script setup>
import Card from './components/Card.vue'
function changeDynamicSlotName(){
  dynamicSlotName.value = dynamicSlotName.value === "header" ? "footer" : "header"
}
</script>
<template>
    <!-- 动态插槽 -->
    <button @click="changeDynamicSlotName">change dynamicSlotName</button>
    <Card>
      <!-- 也可以写成v-slot: dynamicSlotName-->
      <template #[dynamicSlotName]>
        <h1>This is the header</h1>
      </template>
    </Card>
</template>

作用域插槽

插槽的内容无法访问到子组件的状态,在某些场景下插槽的内容可能想要同时使用父组件域内和子组件域内的数据。通过像对组件传递 props 那样,向一个插槽的出口上传递 attributes,el-table中就使用了作用域插槽
FancyButton.vue

<script setup>
const greetingMessage='我是fancyButton组件'
</script>
<template>
  <button class="fancy-btn">
    <slot :text="greetingMessage">
        <!-- 如果父组件没有提供插槽内容的时候就会显示默认值 -->
      submit
    </slot>
  </button>
</template>
<style>
.fancy-btn {
  color: #fff;
  background: linear-gradient(315deg, #42d392 25%, #647eff);
  border: none;
  padding: 65px 50px;
  margin: 5px;
  border-radius: 8px;
  cursor: pointer;
}
</style>

父组件中使用

<script setup>
import Card from './components/Card.vue'
function changeDynamicSlotName(){
  dynamicSlotName.value = dynamicSlotName.value === "header" ? "footer" : "header"
}
</script>
<template>
  <!-- 作用域插槽 -->
  <FancyButton v-slot="props">{{props.text}}</FancyButton>
</template>

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

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

相关文章

微星主板安装系统进不去系统及bios办法

大部分原因是由于主板bios内部开启了 快速启动 选项导致的 可通过另外一个方式进入bios 1.打开控制面板--windows更新-高级启动-点立即重启 之后会进入疑难解答 ---高级----固件设置---点重启就会进入bios了 2.安装系统时注意事项&#xff1a;一般uefi启动对应的是gpt分区&…

柒拾伍- AI内容农场生产文章自动发布至公众号 (一)

一、内容农场 X AI 看过很多的新闻说 AI 产生 内容 污染网络&#xff0c;我也想试一下到底能污染成怎样。 然后为了编写爆款的内容&#xff0c;我选用这个 内容农场 的种子是来源于 微博热搜&#xff0c;让生长出来的垃圾文章更加火爆 涉及内容不能放 二、编写代码 关于代…

上半年净利下滑85%,光峰科技能否靠“上车”扭转局面?

尽管车载业务环比增了3倍&#xff0c;光峰科技今年上半年的净利润依然同比下滑了85%。 根据光峰科技发布的半年报显示&#xff0c;今年上半年&#xff0c;光峰科技营业收入为10.81亿元&#xff0c;同比微增0.76%&#xff1b;实现归属上市公司股东的净利润为1090.96万元&#x…

Java智能匹配灵活用工高效人力资源管理系统小程序源码

智能匹配灵活用工高效人力资源管理系统 &#x1f4bc;&#x1f680; &#x1f680; 开篇&#xff1a;职场新风尚&#xff0c;智能匹配引领变革 在这个瞬息万变的时代&#xff0c;职场也在经历着前所未有的变革。传统的用工模式已难以满足现代企业的需求&#xff0c;而“智能匹…

【兼容多端】UNIAPP popper气泡弹层vue3+typescript unibest

最近要实习一个泡泡弹层。看了下市场的代码&#xff0c;要么写的不怎么好&#xff0c;要么过于复杂。于是拿个轮子自己加工。200行代码撸了个弹出层组件。兼容H5和APP和小程序。 功能&#xff1a; 1)只支持上下左右4个方向的弹层不支持侧边靠齐 2)不对屏幕边界适配 3)支持弹层…

[含文档+PPT+源码等]精品基于asp.net实现的原生Andriod病例管理随访系统[包运行成功+永久免费答疑辅导]

基于ASP.NET实现的原生Android病例管理随访系统背景&#xff0c;可以从以下几个方面进行阐述&#xff1a; 一、技术背景 ASP.NET技术框架 ASP.NET是由微软开发的一种用于构建动态Web应用程序和服务的开源服务器端Web应用框架。它提供了一套丰富的工具和库&#xff0c;支持多种…

真实世界数据,重构临床试验在药物研发的价值!

近年来&#xff0c;真实世界数据&#xff08;RWD&#xff09;和真实世界证据&#xff08;RWE&#xff09;在学术界和工业界备受瞩目。为了促进国际间的交流合作&#xff0c;并提升中国RWE在全球的影响力&#xff0c;阿斯利康于2023年成立了真实世界证据外部咨询委员会&#xff…

FP8013:单节锂电池降压 切五路调光 补光灯/摄影灯 芯片,3A无频闪调光 体积小、效率高、静态功耗低

随着直播行业的不断发展&#xff0c;补光灯的关键性能也日益受到重视。为了提供更好的补光视觉效果&#xff0c;我们需要一种高效、稳定的调光芯片来驱动补光灯的亮度。 一、芯片特色 1、FP8013 工作电压 2.5V~5.5V 适用于单节锂电池和USB口5V输入。 2、内置高低侧切换 MOS&am…

STM32 DMA直接存储器访问 USART串口DMA发送 F407寄存器

DMA介绍&#xff1a; 特点&#xff1a; DMA:直接存储器访问 用于外设与存储器间以及存储器与存储器之间 提高数据传输的一种工具&#xff08;片上外设&#xff09; CPU相当于餐厅老板&#xff0c;只需要告诉DMA快递员 …

在Java程序中监听mysql的binlog

文章目录 1、背景2、mysql-binlog-connector-java简介3、准备工作1、验证数据库是否开启binlog2、开启数据库的binlog3、创建具有REPLICATION SLAVE权限的用户4、事件类型 eventType 解释1、TABLE_MAP 的注意事项2、获取操作的列名 5、监听binlog的position1、从最新的binlog位…

大数据-166 Apache Kylin Cube 流式构建 整体流程详细记录

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

SpringBoot开发——SpringSecurity安全框架17个业务场景案例(三)

文章目录 一、Spring Security 常用应用场景介绍二、Spring Security场景案例12 表达式支持(Expression-Based)12.1 Spring Security 配置12.2 业务逻辑代码12.3 控制器13、安全上下文(Security Context)13.1 Spring Security 配置13.2 业务逻辑代码13.3 控制器14、安全过滤…

Modnet 人像抠图(论文复现)

Modnet 人像抠图&#xff08;论文复现&#xff09; 本文所涉及所有资源均在传知代码平台可获取 文章目录 Modnet 人像抠图&#xff08;论文复现&#xff09;论文概述论文方法复现WebUI部署 论文概述 人像抠图(Portrait matting)旨在预测一个精确的 alpha 抠图&#xff0c;可以用…

宠物浮毛的危害有哪些?适合养宠家庭的宠物空气净化器推荐!

上周有位患者来医院&#xff0c;他说自从养猫以来&#xff0c;喉咙有毛的感觉日益明显&#xff0c;吐也吐不出来&#xff0c;鼻子里也觉得充斥着毛毛&#xff0c;半夜呼吸的时候也时常受阻&#xff0c;现在一直咳嗽鼻塞。让他拍了片子后发现猫毛吸入肺部导致了肺炎。作为一位呼…

如何用ChatGPT 8小时写出一篇完整论文(附完整提示词)

今天教大家如何利用ChatGPT完成一篇完整的论文。只需要一个标题&#xff0c;剩下全部由ChatGPT完成。总耗时8小时。 阅前提醒&#xff1a; 1.适用人群&#xff1a;这个方法适合应付简单的学术任务&#xff0c;比如日常小论文或投稿一般期刊。但如果你要写高水平的论文&#xf…

【磁盘清理】linux df -h 命令不更新磁盘大小解决方法

centos-root df -h不更新磁盘大小 [rootkafka1 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 238G 194G 44G 82% / devtmpfs 7.8G 0 7.8G 0% /dev tmpfs 7.8G 0 7.8G …

深度学习基础知识-01 数据操作

三维数组&#xff1a;通常用于表示单个图像&#xff0c;如&#xff08;高度&#xff0c;宽度&#xff0c;通道数&#xff09;。 四维数组&#xff1a;用于表示图像批次&#xff0c;如&#xff08;批次大小&#xff0c;高度&#xff0c;宽度&#xff0c;通道数&#xff09;。 五…

公开选拔!产业实践教授

产业实践教授&#xff0c;这一相对新兴的概念旨在通过产教融合方式促进高校与产业界的深度融合。 通常由来自产业界、拥有丰富实践经验的企业专家担任&#xff0c;承担特定教学任务和科研指导&#xff0c;或利用自身产业资源为学生提供实践机会和就业指导。 随着产教融合政策…

博睿数据Bonree ONE全面适配HarmonyOS NEXT,守护鸿蒙原生应用稳健前行

10月8日&#xff0c;华为官方正式宣布&#xff0c;华为HarmonyOS NEXT&#xff08;也被称作“纯血鸿蒙”&#xff09;系统开启公测&#xff0c;迎来国产系统里程碑一刻。作为IT运维监控和可观测性领域的领导者&#xff0c;博睿数据&#xff08;股票代码&#xff1a;688229&…

交叉熵损失 在PyTorch 中的计算过程

其实就是根据 真实值的结果&#xff0c;当成索引去取的值 import torch import torch.nn as nnaaaa torch.tensor([[2.0,1.0,3.0],[2.0,4.0,2.0]])l1 nn.LogSoftmax(dim-1) result l1(aaaa) print(result) import torch import torch.nn as nn# 定义交叉熵损失函数 criterio…