Vue.js slot插槽
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插槽的更多相关文章
- Vue结合slot插槽分发父组件内容实现高度复用、更加灵活的dialog组件
之前写过一篇关于vue实现dialog会话框组件的文章(http://www.cnblogs.com/fozero/p/8546883.html)[http://www.cnblogs.com/foz ...
- 使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件
写在前面 之前写过一篇关于vue实现dialog会话框组件的文章http://www.cnblogs.com/fozero/p/8546883.html, 讲到了如何实现一个vue对话框组件,其中涉及 ...
- Vue 之 slot(插槽)
前言: vue中关于插槽的文档说明很短,语言又写的很凝练,再加上其和methods,data,computed等常用选项在使用频率.使用先后上的差别,这就有可能造成初次接触插槽的开发者容易产生“算了吧 ...
- vue中slot插槽
插槽就是vue实现的一套内容分发的API,将插槽元素作为承载分发内容的出口. 也就是说在组件模板中默认占用一个位置,当使用组件标签时候,组件标签的内容就会自动替换掉内容 slot中可以设置一些默认的内 ...
- 简单理解vue的slot插槽
slot的意思是插槽,想想你的电脑主板上的各种插槽,有插CPU的,有插显卡的,有插内存的,有插硬盘的,所以假设有个组件是computer,其模板是 <template> <div&g ...
- vue 之 slot插槽
插槽,也就是slot,是组件的一块HTML模板,这块模板显示不显示.以及怎样显示由父组件来决定. 实际上,一个slot最核心的两个问题这里就点出来了,父组件决定插槽显示或不显示以及怎样显示,子组件决定 ...
- Vue中slot插槽的使用
- vue.js的<slot>
使用插槽分发内容在封装vue组件的时候,很多时候就不得不使用到vue的一个内置组件<slot>.slot是插槽的意思,顾名思义,这个<slot>组件的意义是预留一个区域,让其中 ...
- 构建大型 Vue.js 项目的10条建议
下面是我在开发大型 Vue 项目时的最佳实践.这些技巧将帮助你开发更高效.更易于维护和共享的代码. 今年做自由职业的时候,我有机会开发了一些大型 Vue 应用程序.我所说的这些项目,Vuex stor ...
- Vue.js插槽slot和作用域插槽slot-scope学习小结
一般来说,在Vue项目中使用父子组建时,都是把通用的HTML结构提取出来写成一个子组件,需要动态展示的数据用过prop属性传递,不过有时候我们可能想给子组件传递一个HTML代码,这个时候用prop不太 ...
随机推荐
- Angular 18+ 高级教程 – Signals
前言 首先,我必须先说明清楚.Signal 目前不是 Angular 的必备知识. 你的项目不使用 Signal 也不会少了条腿,断了胳膊. Angular 官方维护的 UI 组件库 Angular ...
- Azure – 对比 AWS Research Report
前言 最近有机会接触了一下 AWS, 在对比完之后决定继续用 Azure, 这里小小记入一下. VM & SQL Server Azure 和 AWS 都可以选择 2 in 1, 或者 Web ...
- go 实现sse
package chat import ( "encoding/json" "github.com/zeromicro/go-zero/core/logx" & ...
- Math 数学库
Math.random() 随机数字 Math.PI 圆周率
- FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
喊了多年的互联网寒冬,今年的寒风格外凛冽,还在坚守安卓开发的朋友着实不容易.因为能转行的早就转了,能转岗的也早就转了,那么安卓程序员比较迷茫的就是,我该学什么安卓技术才好呢?还是直接扔了安卓再去搞别 ...
- Linux命令netstat查看端口使用方法
[redis@fgedu180 ~]$ netstat -an|grep 6379 tcp 0 0 192.168.4.180:6379 0.0.0.0:* LISTEN
- 云原生周刊:K8s 1.26 到 1.29 版本的更新 | 2024.1.29
开源项目推荐 Skaffold Skaffold 是一个命令行工具,有助于 Kubernetes 应用程序的持续开发.您可以在本地迭代应用程序源代码,然后部署到本地或远程 Kubernetes 集群. ...
- 云原生周刊 | 人类、机器人与 Kubernetes
近日 Grafana 官网发表了一篇博客介绍了 2022 年比较有意思.脑洞大开的一些 Grafana 使用案例,比如监控特斯拉 Model 3 的充电状态.OTA 更新状况等等. 海事技术供应商 R ...
- C语言刷题小知识点
力扣返回二维数组 int **spiralMatrix(int m, int n, struct ListNode *head, int *returnSize, int **returnColumn ...
- AMCL 原理解读
AMCL(adaptive Monte Carlo Localization)自适应蒙特卡洛定位,A也可以理解为augmented,,源于MCL算法的一种增强,是机器人在二维移动过程中概率定位系统,采 ...