本文涉及的slot有:<slot>,v-slot吗,vm.$slots,vm.$scopedSlots

废弃的使用特性:slot,slot-scope,scope(使用v-slot,2.6.0)。

<slot>为vue的内置标签:用于给组件定义一个插槽,在这个插槽里传入内容(可以是模板代码或者组件),达到动态改变组件的目的。

v-slot指令:绑定内容到指定插槽,v-slot 只能添加在一个 <template> 上(当父组件中只提供了默认插槽的内容,v-slot可以写在组件上,见下面默认插槽缩写语法)

给插槽设置默认内容,在没有提供内容的时候被渲染。

<button type="submit">
<slot>Submit</slot>
</button>

具名插槽

栗子:<base-layout> 组件

<div class="container">
<header>
<slot name="header"></slot>
</header>
<main>
<slot></slot>//默认插槽,不带 name<slot> 出口会带有隐含的名字“default”。
</main>
<footer>
<slot name="footer"></slot>
</footer>
</div>

使用v-slot绑定内容到指定插槽(v-slot缩写为#,后面必须跟插槽名)

<base-layout>
<template #header>
<h1>Here might be a page title</h1>
</template>
//放入默认插槽中
<p>A paragraph for the main content.</p>
<p>And another one.</p>
 //放入默认插槽中 
  <template #default>
    <p>A paragraph for the main content.</p>
    <p>And another one.</p>
  </template>
<template #footer>
<p>Here's some contact info</p>
</template>
</base-layout>

没被包裹在有 v-slot 或包裹在v-slot为default的<template> 中的内容,会被视为默认插槽的内容。

v-slot使用动态插槽名:

<base-layout>
<template #[dynamicSlotName]>
...
</template>
</base-layout>

具有prop的插槽(作用域插槽)

作用:让插槽内容能够访问子组件中的数据

<slot :userNmae="user.name">//userNmae叫做插槽prop
</slot> //父作用域中,v-slot的值为包含默认插槽所有prop一的个对象,对象名取为slotProps
<template #default="slotProps">
{{ slotProps.userNmae }}
</template>

作用域插槽的使用基于输入的 prop 渲染出不同的内容,达到复用插槽的目的。

解构插槽prop

在支持的环境下 (单文件组件或支持解构语法的浏览器),可以在v-slot里使用参数解构。

作用域插槽的内部工作原理是将插槽内容包括在一个传入单个参数的函数里:

function (slotProps) {
// 插槽内容
}
<current-user #default="{ user }">
{{ user.firstName }}
</current-user> //参数默认值,用于插槽 prop 是 undefined 的情形
<current-user v-slot="{ user = { firstName: 'Guest' } }">
{{ user.firstName }}
</current-user> //user 重命名为 person
<current-user v-slot="{ user: person }">
{{ person.firstName }}
</current-user>

只提供了默认插槽内容时的v-slot简写

当被提供的内容只有默认插槽时,v-slot 直接用在组件上

<current-user v-slot="slotProps">
{{ slotProps.user.firstName }}
</current-user>

只要出现多个插槽,请始终为所有的插槽使用完整的基于 <template> 的语法:

<current-user>
<template v-slot:default="slotProps">
{{ slotProps.user.firstName }}
</template> <template v-slot:other="otherSlotProps">
...
</template>
</current-user>

vm.$slots

组件vm.$slots.插槽名,返回对应插槽的内容。

栗子:

<anchored-heading :level="1">Hello world!</anchored-heading>

anchored-heading组件的模板为:

Vue.component('anchored-heading', {
render: function (createElement) {
return createElement(
'h' + this.level,
this.$slots.default
)
},
props: {
level: {
type: Number,
required: true
}
}
})

anchored-heading 中的 Hello world!,这些子元素被存储在组件实例中的 $slots.default

vm.$scopedSlots

访问作用域插槽,得到的是一个返回 VNodes 的函数。

props: ['message'],
render: function (createElement) {
// `<div><slot :text="message"></slot></div>`
return createElement('div', [
this.$scopedSlots.default({
text: this.message
})
])
}

在使用渲染函数,不论当前插槽是否带有作用域,推荐通过 $scopedSlots 访问。

slot的更多相关文章

  1. QT 中 关键字讲解(emit,signal,slot)

    Qt中的类库有接近一半是从基类QObject上继承下来,信号与反应槽(signals/slot)机制就是用来在QObject类或其子类间通讯的方法.作为一种通用的处理机制,信号与反应槽非常灵活,可以携 ...

  2. kkjcre1p: unable to spawn jobq slave process, slot 0, error 1089(Linux x86_64)补丁

    在shutdown immediately的时候,alert Log出现如下错误信息,并且不能正常关闭 kkjcre1p: unable to spawn jobq slave process, sl ...

  3. Qt里的slot

    昨天出了一个小bug, 一直调都没调出来, 今天仔细看了下, 发现出错的原因了. 我在用osgEarth的时候, 用到一个类MapCatalogWidget, 觉得它不够用, 就把这个类给改了下, 添 ...

  4. Qt链接网站SLOT

    void BottomToolWidget::openLink() { QString link = "http://www.baidu.com";//在.h中添加slot声明,在 ...

  5. slot游戏中的数学概念

    最近研究slot 算法,看了大量的英文资料,因为母语中文,一直使用中文的英文小白来说,好心塞,悔不当初没学好英文. 下文是从众多的英文中摘录的唯一能够看明白的概念.先给自己留着,到时候深入研究可以看 ...

  6. right-click an action, missing "Go to slot"

    According to the tutorial,to connect the actions to slots, right-click an action and select Go to sl ...

  7. 深入了解Qt(三)之元signal和slot

    深入了解Qt主要内容来源于Inside Qt系列,本文做了部分删改,以便于理解.在此向原作者表示感谢! 在Qt 信号和槽函数这篇文章中已经详细地介绍了信号和槽的使用及注意事项.在这里对其使用方面的知识 ...

  8. slot的含义

    1) slot就是槽的意思,是一个资源单位,只有给task分配了一个slot之后,这个task才可以运行.slot分两种,map slot沪蓉reduce slot.另外,slot是一个逻辑概念,一个 ...

  9. slot signal机制

    有一个比较 经典的实现:http://sigslot.sourceforge.net/很精简的 signal slot的实现,跨平台.webrtc项目在用,我在自己项目里也用了.这个源码有2000多行 ...

  10. qt信号signal和槽slot机制

    内容: 一.概述 二.信号 三.槽 四.信号与槽的关联 五.元对象工具 六.程序样例 七.应注意的问题 信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念.元对象工 ...

随机推荐

  1. 8-过滤器Filter和监听器Listener

    一.web监听器:监听特殊事件的发生1.监听实现步骤 a.写一个java类,实现特定的接口,重写相关方法 b.在web.xml中,牌配置 <listener> <listener-c ...

  2. KVM架构及模块简介

    1.简介 2.架构 3.KVM模块及QEMU 一.简介 KVM(Kernel Virtual Machine)基于内核的虚拟机.阿维·齐维迪(Avi Kivity)在一家名为Qumranet的初创企业 ...

  3. SQLserver查询库中包含某个字段的表

    select [name] from [TPMS_PRD].[dbo].sysobjects where id in(select id from [TPMS_PRD].[dbo].syscolumn ...

  4. Framework7 索引列表插件的异步加载实现

    前言 Framework7 作为移动端的开发框架的优良之处已经无需多言.现在已经有了 React 和 Vue 版本,之前在项目中用过 F7 + vue 的开发方式,无论是效率还是产出都近乎完美.有时间 ...

  5. 基于 HTML5 的 WebGL 自定义 3D 摄像头监控模型

    前言 随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的同时,在监控系统中面临着严峻的现状问 ...

  6. debug和release版本的区别

    Debug:调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员调试. Debug模式下生成两个文件,除了 ...

  7. [Alpha阶段]第六次Scrum Meeting

    Scrum Meeting博客目录 [Alpha阶段]第六次Scrum Meeting 基本信息 名称 时间 地点 时长 第六次Scrum Meeting 19/04/10 教2 1层 50min 相 ...

  8. 相片后期处理,PS调出温暖的逆光美女

    原图: 效果图: 后面就是开PS导图: 说明下,因为拍的时候大概知道自己的方法会让照片变暖,现场光线又很暖,所以色温要调低一些,这边是4100,其他不用变,直接转JPG调色了 1:第一步是加第一个曲线 ...

  9. Django rest framework 源码分析 (1)----认证

    一.基础 django 2.0官方文档 https://docs.djangoproject.com/en/2.0/ 安装 pip3 install djangorestframework 假如我们想 ...

  10. AI佳作解读系列(二)——目标检测AI算法集杂谈:R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3

    1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物 ...