vue-组件化-插槽(slot)
理解
Vue组件化中,当我们在设计一个组件的时候,可能会保留一部分,让使用者自定义的内容,比如:
- 导航栏组件中,右上角的分享按钮,左上角做菜单按钮
- 弹出框组件中,弹出框的提示内容等
- ...
在这种场景下,把保留给使用者的部分,叫做插槽(slot)
插槽分类
匿名插槽
理解:
- 所谓匿名插槽,就是这个插槽里,没有声明任何名称,使用者放进来的东西,都扔进这个插槽中。
- 匿名插槽是一种特殊的具名插槽,也就是名为
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)的更多相关文章
- Vue组件化开发
Vue的组件化 组件化是Vue的精髓,Vue就是由一个一个的组件构成的.Vue的组件化设计到的内容又非常多,当在面试时,被问到:谈一下你对Vue组件化的理解.这时候又有可能无从下手,因此在这里阐释一下 ...
- 三. Vue组件化
1. 认识组件化 1.1 什么是组件化 人面对复杂问题的处理方式 任何一个人处理信息的逻辑能力都是有限的,所以当面对一个非常复杂的问题时我们不太可能一次性搞定一大堆的内容. 但是我们人有一种天生的能力 ...
- 二、vue组件化开发(轻松入门vue)
轻松入门vue系列 Vue组件化开发 五.组件化开发 1. 组件注册 组件命名规范 组件注册注意事项 全局组件注册 局部组件注册 2. Vue调试工具下载 3. 组件间数据交互 父组件向子组件传值 p ...
- vue组件化开发实践
前言 公司目前制作一个H5活动,特别是有一定统一结构的活动,都要码一个重复的轮子.后来接到一个基于模板的活动设计系统的需求,便有了一下的内容.首先会对使用Vue进行开发的一些前期需要的技术储备进行简单 ...
- vue组件化的应用
前言:vue组件化的应用涉及到vue-cli的内容,所以在应用之前是需要安装node和vue-cli的,具体如何安装我就不一一赘述了.可能一会儿我心情好的时候,可以去整理一下. 1.应用的内容:在一个 ...
- vue组件化之模板优化及注册组件语法糖
vue组件化之模板优化及注册组件语法糖 vue组件化 模板 优化 在 https://www.cnblogs.com/singledogpro/p/12054895.html 这里我们对vue.js ...
- vue组件化初体验 全局组件和局部组件
vue组件化初体验 全局组件和局部组件 vue组件化 全局组件 局部组件 关于vue入门案例请参阅 https://www.cnblogs.com/singledogpro/p/11938222.h ...
- 4.VUE前端框架学习记录四:Vue组件化编码2
VUE前端框架学习记录四:Vue组件化编码2文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...
- 3.VUE前端框架学习记录三:Vue组件化编码1
VUE前端框架学习记录三:Vue组件化编码1文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...
随机推荐
- LeetCode 刷题1---两数之和
/** 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中 ...
- vue项目中使用bpmn-自定义platter
前情提要 经过前四篇的学习,我们能够实现bpmn基本绘图.预览.为节点加事件加颜色等效果,这一篇我们来说,如何自定义左侧工具栏(platter),首先看一下自定义前后效果图对比: 我们本次要实现的目标 ...
- Linux 通过终端命令行切换系统语言
通过命令的形式修改系统的语言,比较详细的讲解了来龙去脉: 文章目录 0 前言 1 locale 文件 2 查找相关文件 3 解决方案 4 相关信息 4.1 locale属性的含义 4.2 LANGUA ...
- 5.7.17版本mysqlbinlog实时拉取的二进制日志不完整的原因分析
问题描述: 同事使用mysqlbinlog工具的--read-from-remote-server --raw选项,从远程实例实时拉取二进制日志时,发现得到的二进制日志文件大小与远程实例上的源文件大小 ...
- xml(4)
schema约束 dtd语法:<!ELEMENT 元素名称 约束> schema符合xml的语法,xml语句 一个xml中可以有多个schema,多个schema用名称空间区分(类似jav ...
- Ubuntu:Tkinter无法导入
最近想写个GUI小程序,所以就使用了python内置的Tkinter包,但是导入时竟然提示没有这个包? 使用命令搜索了下: sudo apt search python3-tk ,显示已经安装了.又重 ...
- org.springframework.web.bind.annotation不存在 site:blog.csdn.net(IDEA中运行springboot时报错)
原因:MAVEN版本与IDEA版本不兼容问题, maven虽然更新比较慢,但是最新的3.6.6在与IDEA2019版本及以下版本兼容时会出现以上问题 解决办法:重新配置一个3.6低级别版本的maven ...
- 基于hexo创建博客(Github托管)
基于hexo的博客 搭建好的博客网站 dengshuo7412.com 搭建步骤 1.依赖文件下载 Node.js 2.Hexo的安装 3.部署到Github 4.Hexo创建博客基本操作 5.Hex ...
- 《C程序设计语言》 练习3-3
问题描述 编写expand(s1,s2),将字符串s1中类似于a-z类的速记符号在字符串s2中扩展为等价的完整列表abc.....xyz.该函数可以处理大小写字母和数字,并可以处理a-b-c,a-z0 ...
- 「雕爷学编程」Arduino动手做(35)——模拟量声音传感器
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...