前端基础Vue项目中的插槽使用

news2024/12/28 18:15:13

概念

简单理解就是组件内部留一个或多个的插槽位置,可供组件传对应的模板代码进去。插槽的出现,让组件变的更加灵活。

1. 匿名插槽

父组件
<son>
              <p>我是父组件通过匿名插槽传输的内容</p>
            </son>
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 子组件

<template>
  <div>
    我是子组件
    <slot></slot>
  </div>
</template>
<script>
export default {
}
</script>
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

样式

当然也可以直接在slot标签上写内容 ,比如

  <son>
            </son>
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==
<template>
  <div>
    我是子组件
    <slot>我是后补内容</slot>
  </div>
</template>
<script>
export default {
}
</script>
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

大白话就是父组件并没有传输内容,有时为一个插槽设置具体的后备 (也就是默认的) 内容是很有用的,它只会在没有提供内容的时候被渲染。

2. 具名插槽

顾名思义就是带名字的插槽,假如需要在组件内部预留多个插槽位置,就需要为插槽定义名字,指定插入的位置。

Vue 2.6.0+ 版本,使用v-slot替代slot 和 slot-scope。

注意点:
1.具名插槽的内容必须使用模板< template ></ template >包裹;
2.不指定名字的模板插入匿名插槽中,推荐使用具名插槽,方便代码追踪且直观清楚;
3.匿名插槽具有隐藏的名字"default;"
 

2.1 具名插槽的缩写


跟 v-on 和 v-bind 一样,v-slot 也有缩写,即把参数之前的所有内容 (v-slot:) 替换为字符 #。
例如 v-slot:header 可以被重写为 #header;
然而,和其它指令一样,该缩写只在其有参数的时候才可用。这意味着以下语法是无效的:


父组件

 <son :title="name">
              <template #header><p>我是头部</p></template>
              <template #body><p>我是身体</p>
              </template>
              <template v-slot:[name]><p>我是脚部</p>
              </template>
            </son>
子组件
<template>
  <div>
    我是子组件{{title}}
    <slot name="footer"></slot>
    <slot name='body'></slot>
    <slot name="header"></slot>
  </div>
</template>
<script>
export default {
  props: {
    title: String
  }
}
</script>

2.2 动态插槽名

动态指令参数也可以用在 v-slot 上,来定义动态的插槽名

<template v-slot:[name]><p>我是脚部</p>
              </template>

3. 作用域插槽

3.1 父传子

父组件
<son :title="name">
              <template #header><p>我是头部</p></template>
              <template #body><p>我是身体</p>
              </template>
              <template v-slot:[name]><p>我是脚部</p>
              </template>
            </son>
          </el-row>
子组件
<template>
  <div>
    我是子组件{{title}}
    <slot name="footer"></slot>
    <slot name='body'></slot>
    <slot name="header"></slot>
  </div>
</template>
<script>
export default {
  props: {
    title: String
  }
}
</script>

父组件传递的插槽内容是由子组件编译的,插槽作用域由子组件决定。
所以如果需要动态修改插槽的内容,就需要子组件传参给父组件。

3.2 子传父

父组件传参给子组件,props接收后,插槽slot再通过绑定属性传递参数返回给父组件,不管是模板代码还是数据,控制权完全掌握在父组件手里。

第一种方式

父组件
 <son :title="name">
              <template #header="header">{{header.header}}</template>
              <template #body="body">{{body.body}}
              </template>
              <template #footer="footer">{{footer.footer}}
              </template>
            </son>
子组件
<template>
  <div>
    我是子组件
    <slot name="footer" :footer="title.footer"></slot>
    <slot name='body' :body="title.body"></slot>
    <slot name="header" :header="title.header"></slot>
  </div>
</template>
<script>
export default {
  props: {
    title: Object
  }
}
</script>
样式

 第二种方式

子组件通过属性 <slot :自定义属性名 = '值'></slot>,将自己内部的原始类型给到父组件;
父组件 <template slote-scope='自定义接收'></template>;
子组件 slot 除了要占个位置还要传递参数,父组件 slote-scope 负责接收参数;
父组件
 <son :list="provinces">
              <template slot-scope="slotProps">
                <h4 v-for="city in slotProps.cities" :key="city.id" >
                  城市: {{city.name}}
                </h4>
              </template>
            </son>
子组件
<template>
  <div class="footerComponent">
    <div v-for="item in list" :key="item.id">
      <h2>省份:{{item.name}}</h2>
      <slot :cities="item.cities"></slot>
    </div>
  </div>
</template>
<script>
export default {
  props: {
    title: Object,
    list: {
      type: Array,
      default: function() {
        return []
      }
    }
  }
}
</script>

父给子传 provinces,在son便签进行传,子组件接收用props,子给父传item.cities,父template用slot-scope接收。

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

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

相关文章

透过清澈的眼眸:新生儿视力检测的重要性与留意事项

引言&#xff1a; 新生儿的视力发展是其整体感知和认知能力的基础。因此&#xff0c;进行新生儿视力检测是保障他们健康成长的关键一步。本文将深入探讨新生儿视力检测的重要性&#xff0c;并提供父母在这一过程中需要留意的关键事项&#xff0c;以确保宝宝在视觉方面的正常发…

50ms时延工业相机

华睿工业相机A3504CG000 参数配置&#xff1a; 相机端到端理论时延&#xff1a;80ms 厂家同步信息&#xff0c;此款设备帧率上线23fps&#xff0c;单帧时延&#xff1a;43.48ms&#xff0c;按照一图缓存加上传输显示的话&#xff0c;厂家预估时延在&#xff1a;80ms 厂家还有…

2018年第七届数学建模国际赛小美赛C题共享单车对城市交通的影响解题全过程文档及程序

2018年第七届数学建模国际赛小美赛 C题 共享单车对城市交通的影响 原题再现&#xff1a; 共享自行车改变了许多城市的交通状况&#xff0c;许多大城市引入共享自行车来解决交通问题。我们需要定量评估共享自行车对城市交通的影响&#xff0c;以及相关的经济、社会和环境影响。…

人工智能辅助下的人工心脏:未来医疗的奇迹

导言 人工智能在医学领域的应用不断创新&#xff0c;其中人工心脏作为医疗工程的重要方向&#xff0c;将为心血管疾病患者带来新的治疗可能性。本文将深入研究人工智能辅助下的人工心脏技术&#xff0c;其原理、应用以及对未来医疗的影响&#xff0c;探讨人工心脏的发展历程、面…

七轴开源协作机械臂myArm视觉跟踪技术!

引言 ArUco标记是一种基于二维码的标记&#xff0c;可以被用于高效的场景识别和位置跟踪。这些标记的简单性和高效性使其成为机器视觉领域的理想选择&#xff0c;特别是在需要实时和高精度跟踪的场景中。结合机器学习和先进的图像处理技术&#xff0c;使用ArUco标记的机械臂系统…

安卓自动化 APP:轻松关闭任意开屏广告 | 开源日报 No.116

gkd-kit/gkd Stars: 8.7k License: GPL-3.0 基于无障碍 高级选择器 订阅规则的自定义屏幕点击 APP&#xff0c;主要功能包括实现跳过任意开屏广告、关闭应用内部弹窗广告以及一些快捷操作&#xff0c;如微信电脑登录自动同意和领取红包等。其核心优势和特点包括&#xff1a;…

[Ray Tracing in One Weekend] 笔记

前言 本文参照自raytracing in one weekend教程&#xff0c;地址为&#xff1a;https://raytracing.github.io/books/RayTracingInOneWeekend.html 什么是光线追踪&#xff1f; 光线追踪模拟现实中的成像原理&#xff0c;通过模拟一条条直线在场景内反射折射&#xff0c;最终…

【深度学习目标检测】十、基于yolov5的火灾烟雾识别(python,目标检测)

YOLOv5是目标检测领域一种非常优秀的模型&#xff0c;其具有以下几个优势&#xff1a; 1. 高精度&#xff1a;YOLOv5相比于其前身YOLOv4&#xff0c;在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进&#xff0c;如更深的网络结构、更多的特征层和更高分辨率的输入图…

失业无忧!掌握这四个网站,年收入10-20万!

大家好&#xff01;在职场中&#xff0c;失业可能是每个人都会面临的一种情况。当然&#xff0c;失业并不是终点&#xff0c;而是重新出发的起点。在这个充满机遇的数字时代&#xff0c;利用网络资源来提升自己是再合适不过了。今天&#xff0c;我将介绍四个非常有用的网站&…

patchless amsi学习(下)

patchless amsi 代码参考&#xff1a;https://gist.github.com/CCob/fe3b63d80890fafeca982f76c8a3efdf 解读代码可以从函数入口开始 setupAMSIBypass这个函数前面主要是获取amsiScanBuffer的地址&#xff0c;随即注册了一个veh异常。 然后通过调用GetThreadContext获取到了…

解决docker拉取镜像报错:Error response from daemon: Get “https://registry-1.docker.io/v2/“: dial tcp

1、问题&#xff1a;今天做完一个新项目&#xff0c;搭建了一个新的虚拟机&#xff0c;打算使用docker来搭建各种环境&#xff0c;发现拉取镜像报错 2、报错信息&#xff1a;Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 如下&am…

我从阿里云学到的返回值处理技巧

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 阿里云CosmoController…

【办公软件】C# NPOI 操作Excel 案例

文章目录 1、加入NPOI 程序集&#xff0c;使用nuget添加程序集2、引用NPOI程序集3、设置表格样式4、excel加载图片5、导出excel 1、加入NPOI 程序集&#xff0c;使用nuget添加程序集 2、引用NPOI程序集 private IWorkbook ExportExcel(PrintQuotationOrderViewModel model){//…

算法通关村第十关—快速排序(青铜)

快速排序 快排的基本过程 快速排序是将分治法运用到排序问题的典型例子  快速排序基本思想是&#xff1a;通过一个标记pivot元素将n个元素的序列划分为左右两个子序列left和right,.其中left中的元素都比pivot小&#xff0c;right的都比pivot的大&#xff0c;然后再次对Ieft和r…

企业办公加密系统中——全透明加密和半透明加密的区别

PC端访问地址&#xff1a; www.drhchina.com 天锐绿盾数据防泄密系统中的全透明加密和半透明加密的区别如下&#xff1a; 全透明加密是采用驱动层动态加解密技术&#xff0c;对企业内部所有涉密文档进行强制加密处理&#xff0c;从文件创建开始即可自动加密保护。加密文档在加…

【思扬赠书 | 第1期】教你如何一站式解决OpenCV工程化开发痛点

⛳️ 写在前面参与规则 ✅参与方式&#xff1a;关注博主、点赞、收藏、评论&#xff0c;任意评论&#xff08;每人最多评论三次&#xff09;⛳️本次送书1~3本【取决于阅读量&#xff0c;阅读量越多&#xff0c;送的越多】思扬赠书 | 第1期活动开始了&#xff01;&#xff01;…

十问ByteHouse:如何基于ClickHouse玩转向量检索?

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 向量检索被广泛使用于以图搜图、内容推荐以及大模型推理等场景。随着业务升级与 AI 技术的广泛使用&#xff0c;用户期望处理的向量数据规模越来越大&#xff0c;对…

【SpringCloudAlibaba】Sentinel熔断限流工具的使用

一、前言 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维…

增强的对象文字

首先看一下我们之前的一个餐厅的对象 const restaurant {name: Classico Italiano,location: Via Angelo Tavanti 23, Firenze, Italy,categories: [Italian, Pizzeria, Vegetarian, Organic],starterMenu: [Focaccia, Bruschetta, Garlic Bread, Caprese Salad],mainMenu: […

element组件库的日期选择器如何限制?

本次项目中涉及到根据日期查找出来的数据进行调整,所以修改的数据必须是查找范围内的数据.需要对调整数据的日期进行限制,效果如下: 首先我们使用了element 组件库的日期选择器,其中灌完介绍, picker-options中函数disabledDate可以设置禁用状态,代码如下: <el-date-pickerv…