1. 什么是插槽?

父组件通过slot向子组件内部指定位置插入内容。即将slot元素作为承载分发内容的出口

2. 插槽分类

1)默认插槽
2)具名插槽
3)作用域插槽

1)默认插槽

通常将插槽比作一个占位符,有内容进来时,自动把 slot 给替换掉。没有内容进来时,默认显示slot标签中的内容
<template><div class="child-box"><p>我是子组件</p><!-- 插槽 --><slot><p>我是默认内容</p></slot></div>
</template>
<template><div><p>我是父组件</p><child></child><!-- child标签中若添加内容,slot位置则显示添加内容,不显示slot默认内容 --></div>
</template>
结果:slot标签中的“我是默认内容”被渲染出来

2)具名插槽

-1:子组件用name属性来表示插槽的名字,不传为默认插槽
-2:父组件通过v-slot : name 的方式添加内容,该指令需要作用在 template 元素上
-3:v-slot : name可以简写为#name
<template><div><p>我是子组件</p><header><slot name="header"></slot></header><main><!--没有添加 name 属性时, Vue 会隐式的将这个插槽命名为“default” --><slot></slot></main><footer><slot name="footer"></slot></footer></div>
</template>
<template><div><child><template v-slot:header><div>我是 header</div></template><div>我没有名字1</div><div>我没有名字2</div><div>我没有名字3</div><template #footer><div>我是 footer</div></template></child></div>
</template>


注意以下这种情况:

<template><div><child><template v-slot:header><div>我是 header</div></template><div>我没有名字1</div><div>我没有名字2</div><template #default><div>我没有名字3</div></template><template #footer><div>我是 footer</div></template></child></div>
</template>

3)作用域插槽

插槽内容可以访问到父组件的数据作用域,但无法访问到子组件的数据
-1:子组件在slot标签中绑定属性来将子组件的信息传给父组件使用
-2:父组件中在使用时通过v-slot:(简写:#)获取子组件的信息,在内容中使用

默认插槽作用域传值

<template><div><p>我是子组件</p><slot text="我是默认插槽" :count="1"></slot></div>
</template>
<template><div><!-- 只有默认插槽时,可以将v-slot写在组件标签上。多个插槽时,写在组件标签上会报错--><child v-slot="slotProps"><div>{{slotProps}}</div></child></div>
</template>


具名插槽作用域传值

<template><div><p>我是子组件</p><slot text="我是默认插槽" :count="1"></slot><slot name="header" text="我是header插槽" :count="2"></slot></div>
</template>
<template><div><child><template v-slot:default="slotProps"><div>{{slotProps}}</div></template><template #header="{text,count}"><!--解构写法 --><div>{{text}}---{{count}}</div></template></child></div>
</template>

小结:v-slot属性只能在<template>上使用,只有默认插槽时可以在组件标签上使用默认插槽名为default,可以省略default直接写v-slot缩写为#时不能不写参数,写成#default可以通过解构获取v-slot={user},还可以重命名v-slot="{user: newName}"和定义默认值v-slot="{user = '默认值'}"

3. 插槽应用场景

-1: UI 组件库中的弹窗,如果我们没有传入弹窗的头部或者底部,那么弹窗便会有默认的样式效果,这里就用到了 slot 的默认内容功能。弹窗中的内容也可以通过slot进行自定义
-2:当引用公用组件时,公用组件在不同的页面中,可能显示不同。这时可以使用插槽动态显示不同的内容

4. slot与props区别

通过props属性,父组件可以向子组件传递属性、方法,可是父组件不能通过属性传递带标签的内容、甚至是组件,而插槽可以。
参考文章:
https://zhuanlan.zhihu.com/p/529152853

slot(插槽)的理解?使用场景?相关推荐

  1. 【前端知识之Vue】对插槽(slot)的理解

    前言 本系列主要整理前端面试中需要掌握的知识点.本节介绍对插槽(slot)的理解. 文章目录 前言 一.插槽(slot)是什么 二.使用场景 三.slot的分类 默认插槽 具名插槽 作用域插槽 四.面 ...

  2. vue slot scope使用_20、slot插槽的用法

    重点: 单个插槽.具名插槽.作用域插槽的用法: 访问插槽的方法. 其实本小白对插槽理解的还不深,哪些场景会经常用到插槽也不了解. 但是本着"大胆猜测"的理念,我的猜测如下: 假设有 ...

  3. Vue学习笔记(三)Vue2三种slot插槽的概念与运用 | ES6 对象的解构赋值 | 基于Vue2使用axios发送请求实现GitHub案例 | 浏览器跨域问题与解决

    文章目录 一.参考资料 二.运行环境 三.Vue2插槽 3.1 默认插槽 3.2 具名插槽 3.3 作用域插槽 ES6解构赋值概念 & 作用域插槽的解构赋值 3.4 动态插槽名 四.GitHu ...

  4. Vue中的Ajax②(slot插槽)

    文章目录 案例引入 默认插槽 具名插槽 作用域插槽 总结 案例引入 我们现在有一个需求: 代码: App组件: <template><div class="containe ...

  5. slot的含义和使用场景

    一.slot是什么 在HTML中slot元素,是Web组件里面的一个占位符,该占位符可以在后期使用自己的标记语言填充 slot 艺名插槽,花名"占坑",我们可以理解为solt在组件 ...

  6. Vue3中slot插槽使用方式

    一文搞懂Vue3中slot插槽的使用! 使用 Vue 的小伙伴相信你一定使用过插槽,如果你没有用过,那说明你的项目可能不是特别复杂.插槽(slot)可以说在一个 Vue 项目里面处处都有它的身影,比如 ...

  7. vue插槽面试题_Vue 的slot插槽 及一个奇怪的面试题

    slot 插槽,主要用来做内容分发 主要有三种操作方式: 默认插槽 具名插槽 作用域插槽 默认插槽 没有太多的逻辑,就是把父组件的内容分发到子组件的指定位置 // 父组件 {{msg}} // 子组件 ...

  8. 三分钟带你弄懂slot插槽——vue进阶

    文章目录 三分钟带你弄懂slot插槽--vue进阶 一.概述 程序员之死 什么是 slot插槽? 2.6.0 版本中的 slot 二.具名插槽 例子 效果图 代码 三.小惊喜 三分钟带你弄懂slot插 ...

  9. vite+vue3使用slot插槽

    如何简单明了使用slot插槽 在官网已经表明如何使用,但我觉得看的有点小乱,本文章记录一下,也是整理自己的思路 使用solt的理由:在不同的组件使用,它最核心的地方展示是不一样的,但其它的地方是一样的 ...

  10. [vue] slot插槽 默认插槽,具名插槽,作用域插槽

    文章目录 插槽 不使用插槽 效果 分析 默认插槽 效果 分析 具名插槽 效果 分析 作用域插槽 效果 分析 再次理解作用域插槽 代码: 默认插槽: 具名插槽 作用域插槽 插槽 作用:让父组件可以向子组 ...

最新文章

  1. 简述神经网络的训练过程?
  2. 存在多个不同注册中心的时候,如何平滑的统一注册中心?
  3. python 字符串 f_Python字符串格式化f-string多种功能实现
  4. Qt Creator用户界面
  5. linux 每周日执行脚本,Linux任务计划和周期性任务执行
  6. word文档打印 自动编码_职场老油条才知道的3个Word打印技巧,一年能节省几百张打印纸!...
  7. 【CodeForces - 144C】Anagram Search(尺取,滑窗问题,处理字符串计数)
  8. android 多个启动页,Android启动页的问题整理
  9. python常规异常的基类_Python警告的基类警告类是____。
  10. java7 文件_Java SE 7新特性之文件操作(9) - 遍历目录树
  11. [译]JavaScript的新功能将改变正则表达式的编写方式
  12. CVE-2020-0688 Exchange 远程代码执行分析
  13. 网络安全系列之四十六 在IIS6中配置目录安全性
  14. Outlook 邮箱备份操作手册
  15. 问题六十三:怎么用ray tracing画sphere sweeping图形(2)——teapot
  16. 补卡的糟糕经历引发的思考:一点黑客技术让我们不再泄露那么多数据
  17. authorization cache cannot be obtained
  18. MIT molecular Biology 笔记11 位点特异性重组 和 DNA转座
  19. 传统软件厂商生存模式推演
  20. 企业微信SCRM软件打造私域营销闭环?以保险行业为例

热门文章

  1. tizi服务器系统,供应TiZi霆智硬件-ERP*服务器
  2. 《程序员度量:改善软件团队的分析学》一涟漪效应
  3. 只会收藏松果的“松鼠”
  4. 72本值得一读再读的书
  5. MP:精神疾病患者和正常发育人群皮层特征的共同模式
  6. Anaconda下安装labelimg环境
  7. Mac 版Android studio 分配内存设置方法
  8. @Async不生效原因
  9. 517我要吃:20大城市的20道特色面食与特色美食小吃
  10. 实习生实习协议_利用社区力量的实习