vue3学习之插槽slot

关于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>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

回归本真 治愈心灵——汪青《在西行的路上》

回归本真 治愈心灵——汪青《在西行的路上》 知天地、忧生存、明自我。汪青的作品《在西行的路上》主体书写的是描述自己的西北之行。本书在创作之初&#xff0c;作者本人用文字表现不一样的风景&#xff0c;传递出更多美好的瞬间。作者将应用崭新的知识混合脚步踏出的历程&am…

控制层接受用户输入-系统架构师(八十一)

1在MVC设计模式中&#xff0c;以下说法正确的是&#xff08;&#xff09;。 A 控制器表示业务逻辑 B 视图接受用户输入 C 模型表示业务数据 D 一个模型只能为一个视图提供数据 解析&#xff1a; 控制器接受用户输入。 所以C对 2下列&#xff08;&#xff09;设置可以隔离…

jmeter使用csv数据

背景 使用jmeter对系统进行压测。测试数据存储在了csv中&#xff0c;多线程压测的时候&#xff0c;csv中的一条数据不能多个线程同时使用&#xff0c;数据全部使用过后&#xff0c;需要终止压测。 功能点 从csv读取数据后&#xff0c;完成接口数据拼接。多线程依次从csv文件…

大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行

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

集师知识付费小程序:打造培训机构在线教育的金字招牌 集师知识付费系统 集师知识付费小程序 集师知识服务系统 集师线上培训系统 集师线上卖课小程序

在数字化浪潮的推动下&#xff0c;在线教育已成为教育领域的热门话题。而在众多在线教育平台中&#xff0c;集师知识付费小程序凭借其独特的定位和创新的模式&#xff0c;成功为培训机构打造了一张闪亮的在线教育金字招牌。 集师知识付费小程序&#xff0c;是一个集课程展示、…

如何在Chrome、Edge、360、Firefox等浏览器查看网站SSL证书信息?

在如今的网络环境中&#xff0c;保障网络安全、数据安全尤其重要&#xff0c;市面上大部分网站都部署了SSL证书以实现HTTPS加密保护数据传输安全以及验证网站身份&#xff0c;确保网站安全可信。那么如何查看网站的SSL证书信息&#xff1f;接下来&#xff0c;我们将详细介绍如何…

基于STM32的自学习走迷宫智能小车设计

引言 本项目设计了一个基于STM32的自学习走迷宫智能小车。小车通过多个超声波传感器、红外传感器等&#xff0c;检测周围障碍物和路径。它采用简单的强化学习算法&#xff0c;在不断探索的过程中自我调整路径&#xff0c;从而最终找到迷宫的出口。系统适用于智能机器人实验、教…

数据质量差的代价是什么?

如今&#xff0c;许多数字企业都认为自己是数据驱动的。通过各种软件解决方案&#xff0c;数据无处不在&#xff0c;收集起来也非常方便&#xff0c;这使得企业能够被动地收集大量数据&#xff0c;并将其应用于决策制定。 然而&#xff0c;人们往往很容易在不考虑数据质量的情…

Light灯光组件+组件的相关操作+游戏资源的加载

Light灯光组件 Type: Directional:平行光&#xff0c;模仿的是太阳光 Spot:聚光灯 Area:区域光 Color&#xff1a; 颜色值 Mode: RealTime:实时 Mix:混合 Baked:烘焙 Intersity: 光照强度 Indirect Multiplier:光照强度乘数 Shadow Type:影子设置&#xff1a;…

云栖实录 | Hologres3.0全新升级:一体化实时湖仓平台

本文根据2024云栖大会实录整理而成&#xff0c;演讲信息如下&#xff1a; 演讲人&#xff1a; 姜伟华 | 阿里云智能集团资深技术专家、Hologres 负责人 丁 烨 | 阿里云智能集团产品专家、Hologres 产品负责人 活动&#xff1a; 2024 云栖大会 - 商用大数据计算与分析平台论…

OpenCV-人脸检测

文章目录 一、人脸检测流程二、关键方法三、代码示例四、注意事项 OpenCV是一个开源的计算机视觉和机器学习软件库&#xff0c;它提供了多种人脸检测方法&#xff0c;以下是对OpenCV人脸检测的详细介绍&#xff1a; 一、人脸检测流程 人脸检测是识别图像中人脸位置的过程&…

git--git reset

HEAD 单独一个HEAD eg:git diff HEAD 表示当前结点。 HEAD~ HEAD~只处理当前分支。 注意&#xff1a;master分支的上一个结点是tmp分支的所在的结点fc11b74, 79f109e才是master的第二个父节点。 HEAD~ 当前结点的父节点。 HEAD~1 当前结点的父节点。 HEAD~n 当前结点索…

kali linux 允许 root 用户登录 安装过程中不能创建 root 根用户密码 之后不能以根用户直接登录 即使是正确的管理员密码也无法登录

打开终端。 输入命令 sudo passwd root 并按回车键。 系统会提示您输入新的 UNIX 密码&#xff0c;输入您想要设置的密码并按回车键。 再次输入相同的密码进行确认。 如果密码设置成功&#xff0c;会显示 “passwd: password updated successfully”。 在登录界面&#xf…

模态与非模态的对话框

本文学习自&#xff1a; 《Qt Creato快速入门》 #include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }1. #include "widget.h" #include "ui_w…

Linux:进程控制(三)——进程程序替换

目录 一、概念 二、使用 1.单进程程序替换 2.多进程程序替换 3.exec接口 4.execle 一、概念 背景 当前进程在运行的时候&#xff0c;所执行的代码来自于自己的源文件。使用fork创建子进程后&#xff0c;子进程执行的程序中代码内容和父进程是相同的&#xff0c;如果子进…

算法: 位运算题目练习

文章目录 位运算判定字符是否唯一丢失的数字两整数之和只出现一次的数字 II消失的两个数字常见位运算总结 位运算 判定字符是否唯一 有很多解法,比如hash表,或者给字符串排个序,然后遍历… 写这道题时没注意到如果出现奇数个相同字符,此时就应该返回false了. 而不是全部放到位…

### 更新数据库时出错。原因:java.sql.SQLException: No database selected

更新数据库时出错。原因&#xff1a;java.sql.SQLException: No database selected 问题&#xff1a;原因&#xff1a;解决办法&#xff1a; 问题&#xff1a; 在基于idea环境中学习搭建mybatis框架时&#xff0c;MySQL数据库执行插入语句遇到以下异常&#xff1a; com.intel…

SMARTFORMS 可选项CONDITION设置条件,根据条件真假显示不一样的内容

文章目录 开发过程执行测试是否输出 开发过程 执行测试 是否输出

前端开发攻略---使用ocr识别图片进行文字提取功能

1、引入资源 通过链接引用 <script src"https://cdn.bootcdn.net/ajax/libs/tesseract.js/5.1.0/tesseract.min.js"></script> npm或其他方式下载 npm i tesseract 2、示例 <!DOCTYPE html> <html lang"en"><head><meta…

PHP智慧餐饮新风尚点餐系统

智慧餐饮新风尚点餐系统 —— 美食与科技的完美碰撞 &#x1f37d;️ 开篇&#xff1a;智慧餐饮的崛起 在快节奏的现代生活中&#xff0c;智慧餐饮正逐渐成为我们日常的一部分。随着科技的飞速发展&#xff0c;餐饮行业也在不断创新&#xff0c;力求为顾客提供更加便捷、高效…