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 相关文章推荐
jquery如何实现在加载完iframe的内容后再进行操作
Sep 10 Javascript
限制textbox或textarea输入字符长度的JS代码
Oct 16 Javascript
jquery为页面增加快捷键示例
Jan 31 Javascript
jQuery中extend函数详解
Feb 13 Javascript
js代码实现点击按钮出现60秒倒计时
Jan 28 Javascript
浅谈javascript的call()、apply()、bind()的用法
Feb 21 Javascript
快速使用node.js进行web开发详解
Apr 26 Javascript
微信小程序商品详情页规格属性选择示例代码
Oct 30 Javascript
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
Aug 06 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
Mar 21 Javascript
JavaScript的查询机制LHS和RHS解析
Aug 16 Javascript
Vue中的this.$options.data()和this.$data用法说明
Jul 26 Javascript
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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
yii框架配置默认controller和action示例
2014/04/30 PHP
Yii框架上传图片用法总结
2016/03/28 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
Dom与浏览器兼容性说明
2010/10/25 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
jQuery中nextAll()方法用法实例
2015/01/07 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
Bootstrap中datetimepicker使用小结
2016/12/28 Javascript
微信小程序中页面FOR循环和嵌套循环
2017/06/21 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
详解Ubuntu安装angular-cli遇到的坑
2018/09/08 Javascript
Vue.js 事件修饰符的使用教程
2018/11/01 Javascript
详解nuxt 微信公众号支付遇到的问题与解决
2019/08/26 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
wxpython 学习笔记 第一天
2009/02/09 Python
python基础教程之分支、循环简单用法
2016/06/16 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
python url 参数修改方法
2018/12/26 Python
python单线程文件传输的实例(C/S)
2019/02/13 Python
详解Python:面向对象编程
2019/04/10 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
阿迪达斯德国官方网站:adidas德国
2017/07/12 全球购物
毕业生怎样写好自荐信
2013/11/11 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
信用卡工资证明范本
2014/10/17 职场文书
2015年学校财务工作总结
2015/05/19 职场文书
红高粱观后感
2015/06/10 职场文书
postgresql使用filter进行多维度聚合的解决方法
2021/07/16 PostgreSQL