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

02Vue3

slot插槽

Vue 实现了一套内容分发的 API,将 元素作为承载分发内容的出口

简单理解:就是对子组件的扩展,通过 插槽向子组件内部指定位置传递内容

插槽是组件的一块HTML模板,这块模板显示不显示,怎样显示是由父组件来控制的,而插槽在哪里显 示就由子组件来进行控制。

与props的不同:

  1. 通过props属性,父组件只能向子组件传递属性、方法
  2. 而插槽还可以传递带标签的内容、甚至是组件等,更灵活
slot.vue:
<template><div>hello slot<!--如果不给插槽填充内容,则显示默认内容;填充内容,默认内容部生效--><slot>默认内容</slot></div>
</template>
<script setup>
</script><style scoped></style>home.vue:
<template><Slot><!--匿名插槽--><button>点击</button><div><ul><li>111111</li><li>222222</li></ul></div></Slot>
</template>
<script setup>
import Slot from './slot.vue'</script>
<style scoped></style>

插槽类型

插槽分为:匿名插槽| 具名插槽| 作用域插槽

匿名插槽

sub.vue:
<template><div><slot></slot></div>
</template>
<script setup>
</script><style scoped></style>home.vue:
<Sub><!--slot可以省略,有没有slot都是匿名插槽--><ul slot><li v-for="(v, i) in arr" :key="i">{{ v }}</li></ul>
</Sub>

具名插槽

插槽加了名称属性,就变成了具名插槽。在 v-slot 之后添加冒号 (:) ,然后写出要传递内容的 slot 的名称

<!--具名插槽-->
<slot name="header"></slot>
hello world
<button>click</button>
<slot name="xyz"></slot>
<slot></slot><Sub><template #header><h1>ABC</h1></template><template #xyz><ul><li v-for="(v, i) in arr" :key="i">{{ v }}</li></ul></template><!--我们指定了 default 的名称,表示不需要为默认插槽指定名称--><template #default><button>default</button></template>
</Sub>

作用域插槽

官方叫它作用域插槽,实际上,对比前面两种插槽,我们可以叫它带数据的插槽

作用域插槽跟单个插槽和具名插槽的区别,因为单个插槽和具名插槽不绑定数据,所以父组件提供的模板一般要既包括样式又包括内容, 而作用域插槽,相当于父组件提供一套样式,数据都是子组件的。

Sub.vue:
<template><div><!--数据插槽,也是作用域插槽--><slot name="header" :user="user" :num="n"></slot></div>
</template>
<script setup>
import { ref } from 'vue'
const user = ref({ title: 'title', name: 'jack' })
let n = ref(10);
</script><style scoped></style>home.vue:
<!--作用域插槽:obj可以随便定义,这的obj是一个大对象,插槽数据在这个大对象里-->
<Sub><template #header="obj"><h1>标题:{{ obj.user.title }}</h1><h1>作者:{{ obj.user.name }}</h1></template>
</Sub>
<!--插槽数据对象解构-->
<Sub><template #header="{ user }"><h1>标题:{{ user.title }}</h1><h1>作者:{{ user.name }}</h1></templa
http://www.xdnf.cn/news/17725.html

相关文章:

  • github上传项目
  • 视频前处理技术全解析:从基础到前沿
  • Elasticsearch 官方 Node.js 从零到生产
  • docker安装Engine stopped
  • AVS Video Converter视频转换与编辑工具深度评测
  • 功能、延迟、部署、成本全解析:本地化音视频 SDK 对比 云端方案
  • Go 多进程编程-socket(套接字)
  • 定制化4G专网架构,满足多行业专属需求
  • 区间修改 - 差分
  • Kubernetes部署apisix的理论与最佳实践(一)
  • npm install报错~[master] npm install npm error code ERESOLVE npm err
  • 大数据系统架构模式:驾驭海量数据的工程范式
  • RabbitMQ 消息转换器详解
  • 心理咨询|学生心理咨询评估系统|基于Springboot的学生心理咨询评估系统设计与实现(源码+数据库+文档)
  • 使用TextureView和MediaPlayer播放视频黑屏问题
  • AI模型服务接入WAF防火墙
  • 【C++】哈希表的实现(unordered_map和unordered_set的底层)
  • DDIA第五章:分布式数据复制中的一致性与冲突处理
  • 触想定制化工业一体机化身渔业预警终端,守望渔船安全
  • Spring Boot 菜单删除功能的实现与事务管理
  • 【前端基础】16、结构伪类(注:粗略说明)
  • 数据上云有什么好处?企业数据如何上云?
  • 基于FPGA的热电偶测温数据采集系统,替代NI的产品(一)FPGA 测温研究现状
  • 自由学习记录(81)
  • 【JAVA】使用系统音频设置播放音频
  • 零 shot 语义+在线闭环:深度学习让机器人学会“主动”
  • MySQL 数据操作全流程:创建、读取、更新与删除实战
  • 对比FRI 与 Ligero 证明大小
  • 怎么实现表征工程并强化模型的“事实性”“诚信性”
  • 深入解析大模型落地的四大核心技术:微调、提示词工程、多模态应用 及 企业级解决方案,结合代码示例、流程图、Prompt案例及技术图表,提供可落地的实践指南。