本文涉及的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. vue中的watch方法 实时同步存储数据

    watch 监视模式里面有个独特的方法handler 注意要加上deep: true.deep为true时,当对象的key值改变时也监听 当值发生改变被watch监视到触发了事件 开始执行handle ...

  2. MySQL之初识数据库

    一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件 ...

  3. centos7下kubernetes(13。kubernetes-探讨service IP)

    service cluster IP是一个虚拟IP,是由kubernetes节点上的iptables规则管理的 通过iptables-save | grep 10.105.215.156看到与clus ...

  4. HNOI2019:My Dream

    反正这次的目标也不是进省队,目标就是做到最好吧-- 下面都是流水账~ Day -INF ~ Day -3 专题交流没什么好说的,模拟赛详见3.11-3.27省选前多校联考乱记和3.28-4.2CJ大毒 ...

  5. hbase集群搭建参考资料

    hadoop分布式集群搭建 http://www.ityouknow.com/hadoop/2017/07/24/hadoop-cluster-setup.html hbase分布式集群搭建: htt ...

  6. pyspider常见错误

    安装完爬虫框架pyspider之后,使用pyspider all 命令,可能会出现以下错误: - Deprecated option 'domaincontroller': use 'http_aut ...

  7. offsetof(s,m)解析

    https://www.cnblogs.com/jingzhishen/p/3696293.html sizeof()用法汇总 sizeof()功能:计算数据空间的字节数1.与strlen()比较  ...

  8. git仓库构建小记

    1.新建 .git 文件夹 约定的文件目录下,新建 .git 文件夹 mkdir test.git 2.初始化服务端仓库 git init --bare test.git 此时进入 test.git ...

  9. 利用 Python_tkinter 完成 2048 游戏

    成品展示 具备基本的数据合并以及分数统计,不同数字的色块不同 产生随机数, 数据无法合并判定以及重新开始选项 同时可以判定游戏失败条件 需求分析 完成基本数据合并算法 游戏结束条件 界面展示 重置按钮 ...

  10. 【并发编程】【JDK源码】J.U.C--线程池

    原文:慕课网实战·高并发探索(十四):线程池 Executor new Thread的弊端 每次new Thread 新建对象,性能差. 线程缺乏统一管理,可能无限制的新建线程,相互竞争,可能占用过多 ...