理解

Vue组件化中,当我们在设计一个组件的时候,可能会保留一部分,让使用者自定义的内容,比如:

  1. 导航栏组件中,右上角的分享按钮,左上角做菜单按钮
  2. 弹出框组件中,弹出框的提示内容等
  3. ...

在这种场景下,把保留给使用者的部分,叫做插槽(slot)

插槽分类

匿名插槽

理解:

  1. 所谓匿名插槽,就是这个插槽里,没有声明任何名称,使用者放进来的东西,都扔进这个插槽中。
  2. 匿名插槽是一种特殊的具名插槽,也就是名为default的插槽

写法:

  1. //自定义组件中
  2. <template>
  3. <div>
  4. <slot><slot>//匿名插槽
  5. </div>
  6. </template>
  7. //页面(使用者)使用
  8. <template>
  9. <div>
  10. <myComponent><p>我被放进了插槽中</p></myComponent>
  11. </div>
  12. </template>

代码中我被放进了插槽中这句话,就进入了自定义组件的匿名插槽中,从而变成了

  1. //自定义组件中
  2. <template>
  3. <div>
  4. <div>
  5. <p>我被放进了插槽中</p><!-- 匿名插槽中放入了内容 -->
  6. </div>
  7. </div>
  8. </template>

具名插槽

理解:所谓具名插槽,就是这个插槽里,这个插槽被命了名,使用者放进来的东西,声明了插槽的名称,会被分发进这个具名插槽中。

写法:使用template标签声明具名插槽名称<template v-slot:插槽名></template>

  1. //自定义组件中
  2. <template>
  3. <div>
  4. <div class='slot1'>
  5. <slot name='slot1'><slot><!-- 名为“slot1”的具名插槽 -->
  6. </div>
  7. <div class='slot2'>
  8. <slot name='slot2'><slot><!-- 名为“slot2”的具名插槽 -->
  9. </div>
  10. <slot><slot>//这里是个匿名插槽
  11. </div>
  12. </template>
  13. //页面(使用者)使用
  14. <template>
  15. <div>
  16. <myComponent>
  17. <template v-slot:slot1>
  18. <p>名为slot1的具名插槽中</p>
  19. </template>
  20. <a>啦啦啦啦德玛西亚</a>
  21. <template v-slot:slot2>
  22. <p>名为slot2的具名插槽中</p>
  23. </template>
  24. <p>啦啦啦啦德玛西亚</p>
  25. </myComponent>
  26. </div>
  27. </template>

代码被分发到对应插槽后的内容

  1. //自定义组件中
  2. <template>
  3. <div>
  4. <div class='slot1'>
  5. <div>
  6. <p>名为slot1的具名插槽中</p>
  7. </div>
  8. </div>
  9. <div class='slot2'>
  10. <div>
  11. <p>名为slot2的具名插槽中</p>
  12. </div>
  13. </div>
  14. <div>
  15. <a>啦啦啦啦德玛西亚</a>
  16. <p>啦啦啦啦德玛西亚</p>
  17. </div>
  18. </div>
  19. </template>

作用域插槽

理解:一种能够将子组件可用的内容暴露给父组件的插槽。

比如:我们有的时候,需要一些子组件里的东西,做内容拼接,就像一个用户名输入框,我们希望所有的用户名,都跟随一个user_的前缀,此处就可以使用到作用域插槽

  1. //自定义组件中
  2. <template>
  3. <div>
  4. <slot :user='username'><slot>//匿名插槽
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. data(){
  10. return {
  11. username:{
  12. prefix:"user_"
  13. }
  14. }
  15. }
  16. }
  17. </script>
  18. //页面(使用者)使用
  19. <template>
  20. <div>
  21. <myComponent v-slot='obj'>
  22. {{obj.user.prefix}}小寒大人
  23. </myComponent>
  24. </div>
  25. </template>

编译后的结果就变成了

  1. <template>
  2. <div>
  3. <div>
  4. user_小寒大人
  5. </div>
  6. </div>
  7. </template>

默认值(后备内容)

理解

插槽是拥有默认值功能的,如果对应的slot没有传入内容,则会使用slot的默认值

写法

以匿名参数为例

  1. //自定义组件中
  2. <template>
  3. <div>
  4. <slot><p>这里是默认的内容</p></slot>
  5. </div>
  6. </template>
  7. //页面(使用者)使用
  8. <template>
  9. <div>
  10. <myComponent></myComponent>
  11. <myComponent>替换了</myComponent>
  12. </div>
  13. </template>

最终表现结果为

  1. <template>
  2. <div>
  3. <div>
  4. <p>这里是默认的内容</p>
  5. </div>
  6. <div>
  7. 替换了
  8. </div>
  9. </div>
  10. </template>

动态插槽名

理解

可以使用动态值来定某些内容进入某些具名插槽中

写法

正常的具名插槽为v-slot:插槽名,动态的写法为v-slot:[dynamicSlotName],此写法仅在vue2.6.0后的vue中版本使用

简写插槽名

正常的具名插槽为v-slot:插槽名,简写的写法为#插槽名,此写法仅在vue2.6.0后vue中版本使用

vue-组件化-插槽(slot)的更多相关文章

  1. Vue组件化开发

    Vue的组件化 组件化是Vue的精髓,Vue就是由一个一个的组件构成的.Vue的组件化设计到的内容又非常多,当在面试时,被问到:谈一下你对Vue组件化的理解.这时候又有可能无从下手,因此在这里阐释一下 ...

  2. 三. Vue组件化

    1. 认识组件化 1.1 什么是组件化 人面对复杂问题的处理方式 任何一个人处理信息的逻辑能力都是有限的,所以当面对一个非常复杂的问题时我们不太可能一次性搞定一大堆的内容. 但是我们人有一种天生的能力 ...

  3. 二、vue组件化开发(轻松入门vue)

    轻松入门vue系列 Vue组件化开发 五.组件化开发 1. 组件注册 组件命名规范 组件注册注意事项 全局组件注册 局部组件注册 2. Vue调试工具下载 3. 组件间数据交互 父组件向子组件传值 p ...

  4. vue组件化开发实践

    前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了一下的内容.首先会对使用Vue进行开发的一些前期需要的技术储备进行简单 ...

  5. vue组件化的应用

    前言:vue组件化的应用涉及到vue-cli的内容,所以在应用之前是需要安装node和vue-cli的,具体如何安装我就不一一赘述了.可能一会儿我心情好的时候,可以去整理一下. 1.应用的内容:在一个 ...

  6. vue组件化之模板优化及注册组件语法糖

    vue组件化之模板优化及注册组件语法糖 vue组件化 模板 优化  在 https://www.cnblogs.com/singledogpro/p/12054895.html 这里我们对vue.js ...

  7. vue组件化初体验 全局组件和局部组件

    vue组件化初体验 全局组件和局部组件 vue组件化 全局组件 局部组件  关于vue入门案例请参阅 https://www.cnblogs.com/singledogpro/p/11938222.h ...

  8. 4.VUE前端框架学习记录四:Vue组件化编码2

    VUE前端框架学习记录四:Vue组件化编码2文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...

  9. 3.VUE前端框架学习记录三:Vue组件化编码1

    VUE前端框架学习记录三:Vue组件化编码1文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...

随机推荐

  1. 设计模式之GOF23迭代器模式

    迭代器模式Iterator /** * 自定义迭代器接口 * @author 小帆敲代码 * */public interface MyIterator {  void first();//游标置于第 ...

  2. 2020年腾讯实习生C++面试题&持续更新中(2)

    2020年腾讯实习生C++面试题&持续更新中(2) hello,大家好~ 我是好好学习天天,天天编程的天天,一个每天都死磕技术,及时分享的技术宅~ 昨天分享的题目不知道大家是否看过了,以后我计 ...

  3. 2018-06-18 Javascript 基础1

    js是一门基于对象的若类型语言,他和JAVA没有关系: js标签放置位置:1.内联 2.外部 3.内部: js代码是有执行顺序的,这点和css代码有所区别:当对象没有加载完或者还没加载的情况下js代码 ...

  4. app测试、web测试-怎么测?

    app测试 前言 看过许多大神对APP测试的理解,博主总结了一下我们平时测试APP应该注意的一些测试点并结合大神的理解,总结出这篇文章. 一.测试周期 测试周期一般为两周,根据项目情况以及版本质量可适 ...

  5. 让.NetCore程序跑在任何有docker的地方

    一.分别在Windows/Mac/Centos上安装Docker Windows上下载地址:https://docs.docker.com/docker-for-windows/install/(wi ...

  6. 「雕爷学编程」Arduino动手做(14)——倾斜角度模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...

  7. 3.5 Go布尔型

    1.Go布尔型 一个布尔类型的值只有两种:true 和 false. if 和 for 语句的条件部分都是布尔类型的值,并且==和<等比较操作也会产生布尔型的值. package main im ...

  8. k8s搭建实操记录一(master)

    #1)关闭CentOS7自带的防火墙服务 systemctl disable firewalld systemctl stop firewalld swapoff  -a     ##虚拟机要关闭交换 ...

  9. EMAIL、用户名测试点

    EMAIL xxxaa@xxx.xxx 1.没有@情况,如:aa.net 2.没有.符号,如:aa@qqcom 3..后面没有字符:如 xxxaa@xxx. 4..不在@后面, 如:xxxaa.@xx ...

  10. Python 图像处理 OpenCV (4):图像算数运算以及修改颜色空间

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...