vue中slot(插槽)的介绍与使用


Posted in Javascript onNovember 12, 2018

什么是插槽?

插槽(Slot)是Vue提出来的一个概念,正如名字一样,插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性。插槽显不显示、怎样显示是由父组件来控制的,而插槽在哪里显示就由子组件来进行控制

Vue slot 原理

在web-components中有slot的概念,https://developers.google.com/web/fundamentals/web-components/shadowdom。

<slot> 元素

Shadow DOM 使用 <slot> 元素将不同的 DOM 树组合在一起。Slot 是组件内部的占位符,用户可以使用自己的标记来填充。

通过定义一个或多个 slot,您可将外部标记引入到组件的 shadow DOM 中进行渲染。 这相当于您在说“在此处渲染用户的标记”。

注:Slot 是为网络组件创建“声明性 API”的一种方法。它们混入到用户的 DOM 中,帮助对整个组件进行渲染,从而将不同的 DOM 树组合在一起。

怎么用插槽?

默认插槽

父组件

<template>
 <div>
 我是父组件
 <slotOne1>
  <p style="color:red">我是父组件插槽内容</p>
 </slotOne1>
 </div>
</template>

在父组件引用的子组件中写入想要显示的内容(可以使用标签,也可以不用)

子组件(slotOne1)

<template>
 <div class="slotOne1">
 <div>我是slotOne1组件</div>
 <slot></slot>
 </div>
</template>

在子组件中写入slot,slot所在的位置就是父组件要显示的内容

vue中slot(插槽)的介绍与使用

当然再父组件引用的子组件中也可以写入其他组件

父组件

<template>
 <div>
 我是父组件
 <slotOne1>
  <p style="color:red">我是父组件插槽内容</p>
  <slot-one2></slot-one2>
 </slotOne1>
 </div>
</template>

子组件(slotOne2)

<template>
 <div class="slotOne2">
 我是slotOne2组件
 </div>
</template>

vue中slot(插槽)的介绍与使用

具名插槽

子组件

<template>
 <div class="slottwo">
 <div>slottwo</div>
 <slot name="header"></slot>
 <slot></slot>
 <slot name="footer"></slot>
 </div>
</template>

在子组件中定义了三个slot标签,其中有两个分别添加了name属性header和footer

父组件

<template>
 <div>
 我是父组件
 <slot-two>
  <p>啦啦啦,啦啦啦,我是卖报的小行家</p>
  <template slot="header">
   <p>我是name为header的slot</p>
  </template>
  <p slot="footer">我是name为footer的slot</p>
 </slot-two>
 </div>
</template>

在父组件中使用template并写入对应的slot值来指定该内容在子组件中现实的位置(当然也不用必须写到template),没有对应值的其他内容会被放到子组件中没有添加name属性的slot中

vue中slot(插槽)的介绍与使用

插槽的默认内容

父组件

<template>
 <div>
 我是父组件
 <slot-two></slot-two>
 </div>
</template>

子组件

<template>
 <div class="slottwo">
 <slot>我不是卖报的小行家</slot>
 </div>
</template>

可以在子组件的slot标签中写入内容,当父组件没有写入内容时会显示子组件的默认内容,当父组件写入内容时,会替换子组件的默认内容

vue中slot(插槽)的介绍与使用

编译作用域

父组件

<template>
 <div>
 我是父组件
 <slot-two>
  <p>{{name}}</p>
 </slot-two>
 </div>
</template>
<script>
export default {
 data () {
 return {
  name: 'Jack'
 }
 }
}
</script>

子组件

<template>
 <div class="slottwo">
 <slot></slot>
 </div>
</template>

vue中slot(插槽)的介绍与使用

作用域插槽

子组件

<template>
 <div>
 我是作用域插槽的子组件
 <slot :data="user"></slot>
 </div>
</template>

<script>
export default {
 name: 'slotthree',
 data () {
 return {
  user: [
  {name: 'Jack', sex: 'boy'},
  {name: 'Jone', sex: 'girl'},
  {name: 'Tom', sex: 'boy'}
  ]
 }
 }
}
</script>

在子组件的slot标签上绑定需要的值

父组件

<template>
 <div>
 我是作用域插槽
 <slot-three>
  <template slot-scope="user">
  <div v-for="item in user.data" :key="item.id">
  {{item}}
  </div>
  </template>
 </slot-three>
 </div>
</template>

在父组件上使用slot-scope属性,user.data就是子组件传过来的值

vue中slot(插槽)的介绍与使用

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
js防止表单重复提交实现代码
Sep 05 Javascript
javascript内存管理详细解析
Nov 11 Javascript
巧用局部变量提升javascript性能
Feb 24 Javascript
jQuery针对各类元素操作基础教程
Aug 29 Javascript
js查找节点的方法小结
Jan 13 Javascript
jquery实现表单验证简单实例演示
Nov 23 Javascript
浅析JS异步加载进度条
May 05 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
Aug 24 Javascript
Javascript 调用 ActionScript 的简单方法
Sep 22 Javascript
vue-cli脚手架的安装教程图解
Sep 02 Javascript
js实现简单掷骰子效果
Oct 24 Javascript
Vue图片裁剪组件实例代码
Jul 02 Vue.js
vuex的module模块用法示例
Nov 12 #Javascript
React手稿之 React-Saga的详解
Nov 12 #Javascript
基于游标的分页接口实现代码示例
Nov 12 #Javascript
React Hooks的深入理解与使用
Nov 12 #Javascript
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
Nov 12 #Javascript
jQuery 操作 HTML 元素和属性的方法
Nov 12 #jQuery
微信小程序左滑删除功能开发案例详解
Nov 12 #Javascript
You might like
一个php作的文本留言本的例子(六)
2006/10/09 PHP
PHP笔记之:基于面向对象设计的详解
2013/05/14 PHP
解析php中两种缩放图片的函数,为图片添加水印
2013/06/14 PHP
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
javaScript中push函数用法实例分析
2015/06/08 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
2015/11/07 Javascript
javascript中sort排序实例详解
2016/07/24 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
php输出全部gb2312编码内的汉字方法
2017/03/04 Javascript
详解vue组件化开发-vuex状态管理库
2017/04/10 Javascript
Jquery EasyUI $.Parser
2017/06/02 jQuery
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
Vue使用NProgress进度条的方法
2019/09/21 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
2020/08/06 Javascript
[04:54]DOTA2 2017国际邀请赛:上届冠军WINGS采访短片
2017/08/09 DOTA
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
利用Python检测URL状态
2019/07/31 Python
DJango的创建和使用详解(默认数据库sqlite3)
2019/11/18 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
2020/01/02 Python
Python析构函数__del__定义原理解析
2020/11/20 Python
《狼和小羊》教学反思
2014/04/20 职场文书
质量提升方案
2014/06/16 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
我的未来不是梦演讲稿
2014/09/02 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
幼儿园园长工作总结2015
2015/05/25 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP