当前位置: 首页 > news >正文

Vue 之组件插槽Slot用法(组件间通信一种方式)

1)插槽由来和分类

在某些场景中,我们可能想要在父组件为子组件传递一些模板片段,让子组件在它们的组件中渲染这些片段。

这就是插槽的作用。插槽分多种,默认插槽、具名插槽、条件插槽、动态插槽、作用域插槽。

2)插槽类型和举栗子

1.默认插槽

<slot></slot>

举栗子:

父组件:子组件的插槽写在哪里,父组件传递的内容就在哪里展示

<template><div>我是父组件</div><son>我是父组件给子组件的插槽</son>
</template><script setup>
import son from './son.vue'
</script>

子组件:

<template><h3>我是子组件</h3><br><slot></slot>
</template>

 

2.具名插槽,一个子组件可以存在多个

<slot name="header"></slot>
<slot name="footer"></slot>

父组件:父组件使用具名插槽有2种写法

<template><div>我是父组件</div><son>我是父组件给子组件的插槽<!-- 具名插槽写法1 --><!-- <template v-slot:header>header插槽</template> --><!-- 具名插槽写法2 --><template #header>header插槽</template></son>
</template>

子组件:

<template><h3>我是子组件</h3><br><slot></slot><br><slot name="header"></slot>
</template>

 

3.条件插槽,主要是为了给插槽提供额外的样式

  <div v-if="slots.header" class="trans-header"><slot name="header"></slot></div><div v-if="slots.footer" class="trans-footer"><slot name="footer"></slot></div>

举栗子:

父组件:

<template><div>我是父组件</div><son><template #header>header插槽</template><template #footer>footer插槽</template></son>
</template><script setup>
import son from './son.vue'
</script>

 子组件:

<template><h3>我是子组件</h3><br><slot></slot><br><div v-if="slots.header" class="trans-header"><slot name="header"></slot></div><div v-if="slots.footer" class="trans-footer"><slot name="footer"></slot></div>
</template><script setup>
import { onMounted, useSlots } from "vue";
const slots = useSlots()
onMounted(() => {// 可以通过slots判断传递了哪些插槽console.log(slots);
})</script>

4.动态插槽,动态传入插槽名

<son><!-- 该属性dynamicSlotName为动态数据,在js定义并传递 --><template v-slot:[dynamicSlotName]>...</template><!-- 缩写为 --><template #[dynamicSlotName]>...</template>
</son>

5.作用域插槽

父组件:父组件传递给子组件的数据,可以通过插槽再次传递给父组件使用,封装组件时非常常用

<template><div>我是父组件</div><son :obj1="obj1" :obj2="obj2">我是父组件给子组件的插槽<template #header="slot">header插槽{{ slot.obj1 }}</template><template #footer="slot">footer插槽{{ slot.obj2 }}</template></son>
</template><script setup>
import { reactive } from 'vue';
import son from './son.vue'
const obj1 = reactive({ name: '羊羊', age: 12 });
const obj2 = reactive({ name: '猫猫', age: 2 });
</script>

子组件:

<template><h3>我是子组件</h3><br><slot></slot><br><slot name="header" :obj1="obj1"></slot><slot name="footer" :obj2="obj2"></slot>
</template><script setup>
const props = defineProps({obj1: {type: Object, default: () => { }},obj2: {type: Object, default: () => { }},
})
</script>

如有不足,欢迎指正。

不要忽视你达成的每个小练习,它是你前进路上的垫脚石。冲!

 

 

相关文章:

  • 基于NXP LS1046+FPGA的轨道交通3U CPCI多网口解决方案,支持QNX/VXWOKRS/LINUX
  • ERP系统委外工单管理
  • Hive ROW_NUMBER() 简介
  • kubernets资源相关内容介绍
  • 鸢尾花书实践和知识记录[编程1-10可视化]
  • CSS——边框线条动画效果
  • Spring Boot 进阶-Spring Boot的全局异常处理机制详解
  • Linux之实战命令19:tac应用实例(五十三)
  • 输入输出返回值
  • 深圳某局联想SR850服务器黄灯 不开机维修
  • gcc选项-fno-access-control 使用
  • JAVA-内部类和匿名内部类
  • 【微服务即时通讯系统】——etcd一致性键值存储系统、etcd的介绍、etcd的安装、etcd使用和功能测试
  • 【初阶数据结构】排序——选择排序
  • 使用lodash库实现防抖和节流
  • jQuery(一)
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Rancher-k8s加速安装文档
  • REST架构的思考
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 基于axios的vue插件,让http请求更简单
  • 前端相关框架总和
  • 我的业余项目总结
  • 我建了一个叫Hello World的项目
  • 小程序开发中的那些坑
  • 最简单的无缝轮播
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • Linux权限管理(week1_day5)--技术流ken
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​configparser --- 配置文件解析器​
  • ​linux启动进程的方式
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (二)丶RabbitMQ的六大核心
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (四) 虚拟摄像头vivi体验
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (正则)提取页面里的img标签
  • (转)一些感悟
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • ***监测系统的构建(chkrootkit )
  • .gitignore文件设置了忽略但不生效
  • .net core 连接数据库,通过数据库生成Modell
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Core引入性能分析引导优化
  • .NET 直连SAP HANA数据库
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .Net6 Api Swagger配置