理解

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

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

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

插槽分类

匿名插槽

理解:

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

写法:

//自定义组件中
<template>
<div>
<slot><slot>//匿名插槽
</div>
</template> //页面(使用者)使用
<template>
<div>
<myComponent><p>我被放进了插槽中</p></myComponent>
</div>
</template>

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

//自定义组件中
<template>
<div>
<div>
<p>我被放进了插槽中</p><!-- 匿名插槽中放入了内容 -->
</div>
</div>
</template>

具名插槽

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

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

//自定义组件中
<template>
<div>
<div class='slot1'>
<slot name='slot1'><slot><!-- 名为“slot1”的具名插槽 -->
</div>
<div class='slot2'>
<slot name='slot2'><slot><!-- 名为“slot2”的具名插槽 -->
</div>
<slot><slot>//这里是个匿名插槽
</div>
</template> //页面(使用者)使用
<template>
<div>
<myComponent>
<template v-slot:slot1>
<p>名为slot1的具名插槽中</p>
</template>
<a>啦啦啦啦德玛西亚</a>
<template v-slot:slot2>
<p>名为slot2的具名插槽中</p>
</template>
<p>啦啦啦啦德玛西亚</p>
</myComponent>
</div>
</template>

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

//自定义组件中
<template>
<div>
<div class='slot1'>
<div>
<p>名为slot1的具名插槽中</p>
</div>
</div>
<div class='slot2'>
<div>
<p>名为slot2的具名插槽中</p>
</div>
</div>
<div>
<a>啦啦啦啦德玛西亚</a>
<p>啦啦啦啦德玛西亚</p>
</div>
</div>
</template>

作用域插槽

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

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

//自定义组件中
<template>
<div>
<slot :user='username'><slot>//匿名插槽
</div>
</template>
<script>
export default {
data(){
return {
username:{
prefix:"user_"
}
}
}
}
</script> //页面(使用者)使用
<template>
<div>
<myComponent v-slot='obj'>
{{obj.user.prefix}}小寒大人
</myComponent>
</div>
</template>

编译后的结果就变成了

<template>
<div>
<div>
user_小寒大人
</div>
</div>
</template>

默认值(后备内容)

理解

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

写法

以匿名参数为例

//自定义组件中
<template>
<div>
<slot><p>这里是默认的内容</p></slot>
</div>
</template> //页面(使用者)使用
<template>
<div>
<myComponent></myComponent>
<myComponent>替换了</myComponent>
</div>
</template>

最终表现结果为

<template>
<div>
<div>
<p>这里是默认的内容</p>
</div>
<div>
替换了
</div>
</div>
</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. 【Hadoop离线基础总结】完全分布式环境搭建

    完全分布式环境搭建 服务规划 适用于工作当中正式环境搭建 安装步骤 第一步:安装包解压 停止之前的Hadoop集群的所有服务,并删除所有机器的Hadoop安装包,然后重新解压Hadoop压缩包 三台机 ...

  2. Linux从error while loading shared libraries: libxxx.so.x 错误的常规解决思路看程序与动态库的关系

    出现这类错误的原因通常是动态库无法被加载,本文介绍了常规的解决方案,适用多种情况: 创作不易,如果本文帮到了您: 如果本文帮到了您,请帮忙点个赞

  3. X Error:BadDrawable (individ Pixmap or Window parameter 9)

    #描述 平台:aarch64 系统:ubuntu16.04.02 Qt Version:4.8.7 Qt程序可以正常运行,界面渲染出现问题以及乱码,控制提示错误内容: "unable to ...

  4. DotNet:Socket Server 异步套接字服务端实现

    异步服务器套接字示例 From https://msdn.microsoft.com/zh-cn/library/fx6588te(v=vs.110).aspx 下面的示例程序创建接收来自客户端的连接 ...

  5. 广告行业中那些趣事系列10:推荐系统中不得不说的DSSM双塔模型

    摘要:本篇主要介绍了项目中用于商业兴趣建模的DSSM双塔模型.作为推荐领域中大火的双塔模型,因为效果不错并且对工业界十分友好,所以被各大厂广泛应用于推荐系统中.通过构建user和item两个独立的子网 ...

  6. 译文:在GraalVM中部署运行Spring Boot应用

    GraalVM是一种高性能的多语言虚拟机,用于运行以JavaScript等基于LLVM的各种语言编写的应用程序.对于Java应用也可作为通常JVM的替代,它更具有性能优势.GraalVM带来的一个有趣 ...

  7. 第一章 Windows内核概述

    第一章 Windows内核概述 这一章节描述了Windows内核知识中最重要的几个概念,这些话题在这本书之后会有更详细的描述,那些会与当前的主题密切相关.要确保你理解这个章节的概念,因为这些概念构成了 ...

  8. 安装laravel环境之homestead(for mac)

    1.先下载virtualbox + vagrant 2.执行命令 vagrant box add laravel/homestead 3.新建一个空文件夹,在里面下载代码.我是放在当前用户下的新建的W ...

  9. Python--oop面向对象的学习1

    类和对象的成员分析 ·类和对象都可以存储成员,成员可以归类为所有,也可以归对象所有 ·类存储成员时使用的是与类关联的一个对象 ·独享存储成员时存储在当前对象中 ·对象访问一个成员,如果对象中没有该成员 ...

  10. unserialize3

    0x01序列化与反序列化 序列化:将变量转换为可保存或传输的字符串的过程. 反序列化:在适当的的时候把这个字符串再转化成原来的变量使用. 优点: 存储和传输数据更方便,使程序维护性更高. 函数: se ...