vue中的插槽slot理解
本篇文章参考赛冷思的个人博客
1.函数默认传参
在我们写js函数我们的可能会给他们一个默认的参数,写法是
function show(age,name){
var age = age || 20;
var name = name || 张三;
console.log(age,name);
}
show(); // 20,张三
show(18,"命名") // 18,明明
如果用户不传入参数,那么会输出默认值,如果用户传入,会输出传入的值,这种写法很灵活
vue中的组件,也可以有默认的模板,当我们调用一个组件,啥都不传时,显示我们定义的默认模板,当我们传了自定义模板时,就应该使用我们自定义的模板,来替换默认模板,那么,今天说的slot,其实它就是实现的这个功能,可以理解为函数的传参。下面以类似官方的例子进行解释。
现在有个一个模板 child
<div>
<h2>我是子组件的标题</h2>
<slot>
<p>当父组件调用我时,没有传自定义内容时,我就会显示了,如果传了自定义内容,我就不显示了。</p>
</slot>
</div>
slot中的就是默认参数,如果我们不传入参数
<child></child>就会被渲染成
<div>
<h2>我是子组件的标题</h2>
<p>当父组件调用我时,没有传自定义内容时,我就会显示了,如果传了自定义内容,我就不显示了。</p>
</div>
如果我们传入参数
<child><p>这是我自定义的内容,覆盖子组件slot中的内容</p></child>渲染为
<div>
<h2>我是子组件的标题</h2>
<p>这是我自定义的内容,覆盖子组件slot中的内容</p>
</div>
我们可以看到child中的元素会把模板中的内容改变,就好像我们传入的参数一样,所有理解为默认模板
但是可以看到,这种方式过于粗暴,并且只能定义一块默认内容,不是很方便,所以官方说了,slot还提供了一个具名功能,意思就是,在子组件定义slot时,加个标识,在父组件调用,自定义内容时,也加上标识,这样就实现了可以在任意地方定义默认内容,下面有请具名slot,其实就是给slot起个名字
<div class="container">
<header>
<slot name="header"><h1>默认header</h1></slot>
</header>
<main>
<slot><p>默认main</p></slot>
</main>
<footer>
<slot name="footer"><p>默认footer</p></slot>
</footer>
</div>
上面的是子组件,我们给每一个slot一个name属性,如果是默认值的话,name是没有什么作用的,在传参时,我们可以让child中的元素,加上slot属性
<div>
<child>
<h1 slot='header'>自定义标题</h1>
<p slot='footer'>自定义底部</p>
<p>自定义main</p>
</child>
</div>
所以,我们的child最后就被渲染成了
<div>
<div class="container">
<header>
<h1>自定义标题</h1>
</header>
<main>
<p>自定义main</p>
</main>
<footer>
<p>自定义底部</p>
</footer>
</div>
</div>
在子组件定义slot加个name属性值,在父组件调用时,加上slot属性,值就是子组件中slot的name属性值,这样就会自动定位到对应的slot中,就实现了多个地方定义默认内容。
2019年7月3日更新,最近vue跟新了2.6版本,slot的语法变了,但是整体的作用没有改变,上面的语法已经废弃了,新的语法是 slot 和 template+v-slot,需要用的小伙伴去官网查看新的语法
vue中的插槽slot理解的更多相关文章
- 在vue中使用插槽 slot
插槽(slot)这个概念非常重要 插槽的使用场景1:在子组件里面显示父组件的dom <div id='root'> <child content = '<p>Dell&l ...
- vue中的插槽slot
插槽(slot):是组件的一块HTML模板,父组件决定这块模板显不显示以及怎么显示. 位置由子组件自身决定(slot现在组件template的什么位置,父组件传过来的模板将来就显示在什么位置) 匿名插 ...
- Vue中的插槽---slot
一:什么是插槽? 插槽(Slot)是Vue提出来的一个概念,正如名字一样,插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性. 插槽显不显示.怎样显示是由 ...
- vue中的插槽(slot)
vue中的插槽,指的是子组件中提供给父组件使用的一个占位符,用<slot></slot>标签表示,父组件可以在这个占位符中填充任何模板代码,比如HTML.组件等,填充的内容会替 ...
- Vue中diff算法的理解
Vue中diff算法的理解 diff算法用来计算出Virtual DOM中改变的部分,然后针对该部分进行DOM操作,而不用重新渲染整个页面,渲染整个DOM结构的过程中开销是很大的,需要浏览器对DOM结 ...
- Vue插槽slot理解与初体验 ~
一.插槽的理解 1.官网介绍 Vue 实现了一套内容分发的 API,将 <slot> 元素作为承载分发内容的出口. 2.为什么使用插槽 Vue 中有一个重要的概念-组件,可以在开发中将子组 ...
- 摘抄大神对VUE 中slot-scope的深度理解
Vue的slot-scope的场景的个人理解 这篇文章不是单纯把文档的话和api拿来翻译和演示,而是谈谈我对于slot-scope的使用场景的个人理解,如果理解错误,欢迎讨论! Vue的插槽slot, ...
- 详解Vue中的插槽
作者: 小土豆 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/2436173500265335 什么是插槽 在日常的项目 ...
- 第八十九篇:Vue 重学插槽slot
好家伙, 1.什么是插槽? 插槽是vue为组件的封装者提供的能力.允许开发者在封装组件时, 把不确定的,希望由用户指定的部分定义为插槽 我们依然可以把它理解为一个占位符 1.1.插槽的基本用法 试 ...
随机推荐
- Spring深入浅出(二)IOC的单例 ,继承,依赖,JDBC,工厂模式以及自动装载
IOC的单例模式--Bean Spring中的bean是根据scope来决定的. scope有4种类型: 1.singleton:单例模型,表示通过Spring容器获取的该对象是唯一的.常用并且默认. ...
- TypeError: 'dict' object is not callabled
Traceback (most recent call last): File "/root/Desktop/JuniperBackdoor-master/censys.py", ...
- url链接打开本地应用(测试通过)
基于windows!! 类比mailto://XXXX 主要参考: https://www.cnblogs.com/snow365/p/6428212.html 应用 1.在网页上本地办公 网页应用越 ...
- vSphere VCSA5.5加入AD域环境问题记录
vSphere VCSA5.5加入AD域环境问题记录 实验目的: 搭建一套vSphere VCSA5.5,并加入新搭建的AD域,并使用一个域用户登录VC,赋予对VC的只读权限. 实验环境: 使用VMW ...
- iptables指南
在了解iptables之前我们先了解一下 防火墙 的概念防火墙是由Check Point创立者Gil Shwed于1993年发明并引入国际互联网,防火墙也是一种位于内部网络与外部网络之间的网络安全系统 ...
- Unity 如何将apk放到Android系统的system里
有时我们需要用unity开发一款Android的系统软件,很坑,步骤如下: 1.用unity打包出来,签名. 2.用解压工具打开签过名的apk. 3.将lib里面的.so文件复制出来. 4.adb r ...
- 八 rowkey设计 几种方法
简单来讲,rowkey就是 KeyValue 中的key rowkey设计之 尽量散列设计 RowKey 如第三部分第六中讲到,如果数据都是有序的存储到一个特定的范围内,将会存 ...
- iOS 动画Animation - 5:UIBezier
首先说明:这是一系列文章,參考本专题下其它的文章有助于你对本文的理解. 在之前的bolg中大家会发现总是会出现UIBezier,可是我也没有做过多介绍,今天就集中介绍一下UIBezier.首先.UIB ...
- zend framework获取数据库中枚举类enum的数据并将其转换成数组
在model中建立这种模型,在当中写入获取枚举类的方法 请勿盗版,转载请加上出处http://blog.csdn.net/yanlintao1 class Student extends Zend_D ...
- 为什么用卷积滤波,而不是非常easy的在频率领域内进行数据的频率处理
卷积.为了更好的"动态"滤波. 问题来了.为什么用卷积滤波.而不是非常easy的在频率领域内进行数据的频率处理? 为了强调我觉得的答案,已经用blog标题给出了.卷积.为了更好的& ...