本文涉及的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. leetcode 203. Remove Linked List Elements 、83. Remove Duplicates from Sorted List 、82. Remove Duplicates from Sorted List II(剑指offer57 删除链表中重复的结点)

    203题是在链表中删除一个固定的值,83题是在链表中删除重复的数值,但要保留一个:82也是删除重复的数值,但重复的都删除,不保留. 比如[1.2.2.3],83题要求的结果是[1.2.3],82题要求 ...

  2. python之zip打包

    import zipfile # 压缩 z = zipfile.ZipFile('z.zip', 'w') z.write('xo.xml') z.write('xxxoo.xml') z.close ...

  3. 使用 Linux 文件恢复工具

    使用 Linux 文件恢复工具         Linux 文件恢复的原理 inode 和 block 首先简单介绍一下 Linux 文件系统的最基本单元:inode.inode 译成中文就是索引节点 ...

  4. vue 中使用jquery

    vue-cli搭建的项目 第一种方式:npm 引包的方式 1.安装jquery npm install jquery --save 2.webpack配置 在项目根目录下的build目录下找到webp ...

  5. HIT创业感言:只有长寿的企业才有持续价值

    导语:本文将讨论医疗信息化行业中的创业和企业经营问题.笔者创立的南京都昌科技有限公司专做电子病历编辑器控件,已经有3年多,期间辛苦多年,但因为医疗信息化行业的整体发展良好,也能有所成就了,不过革命尚未 ...

  6. linux测速工具 speedtest-cli

    安装speedtest-cli: wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/ ...

  7. 在pycharm中查看内建函数源码

    鼠标放在内建函数上,Ctrl+B,看源码

  8. python爬虫爬取赶集网数据

    一.创建项目 scrapy startproject putu 二.创建spider文件 scrapy genspider  patubole patubole.com   三.利用chrome浏览器 ...

  9. 三、调试IIS启动域名配置

    一.IIS配置启动VS以及域名 1.hosts配置 2.配置 注意: 1.Web和Api 端口在IIS都设置80即可,都可以同时运行不冲突,与vs的IIS express启动方式不同vs会指定不同的两 ...

  10. Django初印象之视图(view)

    一.view的初印象 一个视图函数(类),简称视图.我们发起web请求时,返回的web响应.[大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中.] ...