1.插槽的基本用法

  • 组件的插槽允许用户将其他组件或者html片段插入到组件当中
// App.vue
<template>
<div id="app">
<Child>
<!-- 在子组件中插入标签 -->
<h2>我是插入的h2</h2>
</Child>
</div>
</template>
  • 子组件需要一个slot来接收父组件传入的组件或者html片段
// 子组件
<template>
<div id="child">
<!-- slot标签将被插入的标签替代 -->
<slot></slot>
<h2>我是Hello组件</h2>
</div>
</template>

渲染结果:

<div id="app">
<div id="child">
<h2>我是插入的h2</h2>
<h2>我是Child组件</h2>
</div>
</div>

这种插槽只有一个,被称为匿名插槽。

2.具名插槽

  • 如果子组件有多个插槽,就需要为每个插槽添加一个标识,即name属性,方便对号入座
<template>
<div id="child">
<slot name="top"></slot>
<h2>我是Child组件</h2>
<slot name="bottom"></slot>
</div>
</template>
  • 父组件插入标签时 通过设定slot属性值,来关联对应的插槽
<template>
<div id="app">
<Child>
<!-- 在子组件中插入标签 -->
<h2 slot="top">我是插入的h2</h2>
<h5 slot="bottom">我是插入的h5</h5>
</Child>
</div>
</template>

渲染结果:

<div id="app">
<div id="child">
<h2>我是插入的h2</h2>
<h2>我是Child组件</h2>
<h5>我是插入的h5</h5>
</div>
</div>

3.插槽的默认内容

  • slot标签内可以写html代码,如果这个插槽没有被替换,会显示该插槽内的html内容,反之会被替换
<template>
<div id="child">
<slot name="top">
<p>我是top插槽没使用的时候展示的内容</p>
</slot>
<h2>我是Child组件</h2>
<slot name="bottom"></slot>
</div>
</template>
// App.vue
<template>
<div id="app">
<Child>
<h5 slot="bottom">我是插入的h5</h5>
</Child>
</div>
</template>

渲染结果:

<div id="app">
<div id="child">
<p>我是top插槽没使用的时候展示的内容</p>
<h2>我是Child组件</h2>
<h5>我是插入的h5</h5>
</div>
</div>

5.slot-scope(作用域插槽)

  • 这个功能通用来为slot标签绑定数据,通常一个组件渲染数据有默认的样式,如果用户不满意,可以提供插槽,并绑定相关数据,使用户可以拿到之前的数据并用自己的方式渲染
// 子组件
<template>
<div id="child">
<!-- 在slot标签中2个数据 -->
<slot name="top" :p1="p1" :p2="p2">
<h3>{{p1.name}}</h3>
<h3>{{p1.age}}岁</h3>
<h3>{{p2.name}}</h3>
<h3>{{p2.age}}岁</h3>
</slot>
<h2>我是Hello组件</h2>
<slot name="bottom"></slot>
</div>
</template> <script>
export default {
data () {
return {
p1: {name: '乔治',age: 4},
p2 :{name: '佩琪',age: 8}
}
}
}
</script>
  • 父组件在替代slot的标签中添加 slot-scope属性,表示接受当前slot绑定的数据。因为slot标签上可能绑定了多个数据,所以vue将所有的数据都包裹在一个对象内,可以通过这个对象的属性名来访问对应的数据。
// App.vue
<template>
<div id="app">
<Hello>
<template slot-scope="{p1,p2}" slot="top">
<p>{{p1.name}}</p>
<p>{{p1.age}}岁</p>
<p>{{p2.name}}</p>
<p>{{p2.age}}岁</p>
</template>
<h5 slot="bottom">我是插入的h5</h5>
</Hello>
</div>
</template>

6.新的插槽语法(2.6.0)

  • 2.6.0版本起,使用v-slot:插槽名来代替slot=插槽名,且标签模版需要用template包起来
  • v-slot指令的值可以用来接收插槽绑定的数据
  • v-slot:插槽名可以简写成#插槽名
<child>
<template v-slot:top="{cname,age}">
<h1>{{cname}} - {{age}}</h1>
</template>
<template #:bottom="{cname,age}">
<h1>{{cname}} - {{age}}</h1>
</template>
</child>

Vue.js slot插槽的更多相关文章

  1. Vue结合slot插槽分发父组件内容实现高度复用、更加灵活的dialog组件

    之前写过一篇关于vue实现dialog会话框组件的文章(http://www.cnblogs.com/fozero/p/8546883.html)[http://www.cnblogs.com/foz ...

  2. 使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件

    写在前面 之前写过一篇关于vue实现dialog会话框组件的文章http://www.cnblogs.com/fozero/p/8546883.html, 讲到了如何实现一个vue对话框组件,其中涉及 ...

  3. Vue 之 slot(插槽)

    前言: vue中关于插槽的文档说明很短,语言又写的很凝练,再加上其和methods,data,computed等常用选项在使用频率.使用先后上的差别,这就有可能造成初次接触插槽的开发者容易产生“算了吧 ...

  4. vue中slot插槽

    插槽就是vue实现的一套内容分发的API,将插槽元素作为承载分发内容的出口. 也就是说在组件模板中默认占用一个位置,当使用组件标签时候,组件标签的内容就会自动替换掉内容 slot中可以设置一些默认的内 ...

  5. 简单理解vue的slot插槽

    slot的意思是插槽,想想你的电脑主板上的各种插槽,有插CPU的,有插显卡的,有插内存的,有插硬盘的,所以假设有个组件是computer,其模板是 <template> <div&g ...

  6. vue 之 slot插槽

    插槽,也就是slot,是组件的一块HTML模板,这块模板显示不显示.以及怎样显示由父组件来决定. 实际上,一个slot最核心的两个问题这里就点出来了,父组件决定插槽显示或不显示以及怎样显示,子组件决定 ...

  7. Vue中slot插槽的使用

  8. vue.js的<slot>

    使用插槽分发内容在封装vue组件的时候,很多时候就不得不使用到vue的一个内置组件<slot>.slot是插槽的意思,顾名思义,这个<slot>组件的意义是预留一个区域,让其中 ...

  9. 构建大型 Vue.js 项目的10条建议

    下面是我在开发大型 Vue 项目时的最佳实践.这些技巧将帮助你开发更高效.更易于维护和共享的代码. 今年做自由职业的时候,我有机会开发了一些大型 Vue 应用程序.我所说的这些项目,Vuex stor ...

  10. Vue.js插槽slot和作用域插槽slot-scope学习小结

    一般来说,在Vue项目中使用父子组建时,都是把通用的HTML结构提取出来写成一个子组件,需要动态展示的数据用过prop属性传递,不过有时候我们可能想给子组件传递一个HTML代码,这个时候用prop不太 ...

随机推荐

  1. HTML – HTML Tags & Semantic HTML 语义化 HTML

    前言 HTML tag 有 100 多个, 有些是功能形的, 非用不可, 有些是为了语义化对 screen reader 友好 (给眼睛有残缺的人也可以获取清晰的网站信息). 语义化是很重要的, 有些 ...

  2. Spring —— 整合MyBatis

    MyBatis核心程序      配置文件    整合MyBatis      

  3. mysql 批量有则修改,无则新增

    需要为表添加唯一索引 alter table tb_*** add unique index(aa,bb); -- 此条为联合唯一索引INSERT INTO<include refid=&quo ...

  4. RTThread内对##连接符和#转字符串这俩符号的使用

    早就知道这俩符号的意思,最近翻看代码又看到了,仍然觉得熟悉又陌生,主要是自己平时写代码对这俩符号用的比较少.于是特地做个实验,加深下理解.可记的东西不多,这篇随笔算是随手一写吧. 上实验代码: 来源: ...

  5. request和response请求包中的各项解释

    Request Response

  6. Java项目笔记(五)

    这里写目录标题 @Valid 失效 解析jwt 无法建立SSL连接 windows下打jar包,读取nacos 配置文件 异常 @Valid 失效 加入以下依赖 <dependency> ...

  7. [使用目前最新版]HybridCLR6.9.0+YooAsset2.2.4实现纯C# Unity热更新方案 (一)

    1.前言 什么是热更新 游戏或者软件更新时,无需重新下载客户端进行安装,而是在应用程序启动的情况下,在内部进行资源或者代码更新 Unity目前常用热更新解决方案 HybridCLR,Xlua,ILRu ...

  8. 如何关闭每次打开启动软件前的弹窗(用户账户控制)你要允许此应用.WIN11、10、7

    1.先点击任务栏内的搜索,输入"控制面板",然后点开 2.然后在右上角输入"更改用户",然后在下方点击"更改用户账户控制设置" 3.然后把& ...

  9. Go语言对接微信支付与退款全流程指南

    目录: 一.准备工作 二.初始化微信支付客户端 三.实现支付功能 1. 付款时序图 2. 实现不同场景下的支付 WAP端支付 PC端支付 Android端支付 3. 解析支付回调 四.实现退款功能 退 ...

  10. npy转换为png和nii文件

    #coding:utf-8 import matplotlib.pyplot as plt import numpy as np import os from skimage.transform im ...