详解Vue组件之作用域插槽


Posted in Javascript onNovember 22, 2018

写作用域插槽之前,先介绍一下Vue中的slot内容分发:

详解Vue组件之作用域插槽

如果<child-component></child-component>标签之间没有插入那两个p标签的话,页面会显示子组件模板中定义的“<p>父组件如果没有插入内容,我将被显示</p>”这一则内容,但如果<child-component></child-component>标签之间有插入内容的话,则子组件模板中的<slot></slot>标签以及之间的内容都会被替换成<child-component></child-component>标签之间插入的内容。

这里子组件<slot>内的备用内容,作用域是子组件本身;

作用域插槽:

详解Vue组件之作用域插槽

显示结果:

详解Vue组件之作用域插槽

template内可以通过临时变量props来访问来自子组件插槽的数据msg

作用域插槽更具代表性的用例是列表组件:

详解Vue组件之作用域插槽

子组件<my-list></my-list>接受一个父组件传过来的books数组。并且将它在name为book的slot上使用v-for循环,同时暴露变量bookName,父组件的my-list标签内就可以通过props.bookName访问到绑定的数据;

作用域插槽的使用场景:既可以复用子组件的slot,又可以使slot内容不一致;

补充:vue插槽和作用域插槽的理解

插槽:

插槽,也就是slot,是组件的一块HTML模板,这块模板显示不现实、以及怎样显示由父组件来决定。插槽模板是slot,它是一个空壳子,因为它显示与隐藏以及最后用什么样的html模板显示由父组件控制。但是插槽显示的位置由子组件自身决定,slot写在组件template的哪块,父组件传过来的模板将来就显示在哪块。这样就使组件可复用性更高,更加灵活。我们可以随时通过父组件给子组件加一些需要的东西。

作用域插槽:

插槽可以控制html模板的显示与不显示。作用域插槽其实就是带数据的插槽。原来父组件可以通过绑定数据传递给子组件。作用域插槽就可以通过子组件绑定数据传递给父组件。

<ul><li
  v-for="todo in todos"
  v-bind:key="todo.id"
 >
  <!-- 我们为每个 todo 准备了一个插槽,-->
  <!-- 将 `todo` 对象作为一个插槽的 prop 传入。-->
  <slot v-bind:todo="todo">
   <!-- 回退的内容 -->
   {{ todo.text }}
  </slot>
 </li>
</ul><todo-list v-bind:todos="todos">
 <!-- 将 `slotProps` 定义为插槽作用域的名字 -->
 <template slot-scope="slotProps">
  <!-- 为待办项自定义一个模板,-->
  <!-- 通过 `slotProps` 定制每个待办项。-->
  <span v-if="slotProps.todo.isComplete">✓</span>
  {{ slotProps.todo.text }}
 </template></todo-list>

slot-scope就相当于是一个对象,这个对象里面的数据就是子组件插槽绑定传上来了。在vue 2.5.0+ slot-scope不再限制在<template>元素上使用,而可以用在插槽内的任何元素或组件上。

总结

以上所述是小编给大家介绍的Vue组件之作用域插槽,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
用js 让图片在 div或dl里 居中,底部对齐
Jan 21 Javascript
解决jQuery插件tipswindown与hintbox冲突
Nov 05 Javascript
jqGrid jQuery 表格插件测试代码
Aug 23 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
May 28 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
Nov 16 Javascript
BootStrap扔进Django里的方法详解
May 13 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
May 16 Javascript
图文详解JavaScript的原型对象及原型链
Aug 02 Javascript
详解Vue2中组件间通信的解决全方案
Jul 28 Javascript
JS生成随机打乱数组的方法示例
Dec 23 Javascript
微信小程序实现点击图片旋转180度并且弹出下拉列表
Nov 27 Javascript
ES6 Object.assign()的用法及其使用
Jan 18 Javascript
详解vue中localStorage的使用方法
Nov 22 #Javascript
微信小程序功能之全屏滚动效果的实现代码
Nov 22 #Javascript
layer弹出子iframe层父子页面传值的实现方法
Nov 22 #Javascript
js操作table中tr的顺序实现上移下移一行的效果
Nov 22 #Javascript
从源码里了解vue中的nextTick的使用
Nov 22 #Javascript
Vue动态加载异步组件的方法
Nov 21 #Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
Nov 21 #Javascript
You might like
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
非常实用的php验证码类
2016/05/15 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
js对象的比较
2011/02/26 Javascript
使用text方法获取Html元素文本信息示例
2014/09/01 Javascript
js+css实现导航效果实例
2015/02/10 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
JavaScript操作选择对象的简单实例
2016/05/16 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
vue实现可增删查改的成绩单
2016/10/27 Javascript
为什么我们要做三份 Webpack 配置文件
2017/09/18 Javascript
自定义PC微信扫码登录样式写法
2017/12/12 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
小程序实现留言板
2018/11/02 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
python3访问sina首页中文的处理方法
2014/02/24 Python
wxPython使用系统剪切板的方法
2015/06/16 Python
Python字符编码判断方法分析
2016/07/01 Python
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
python 文件转成16进制数组的实例
2018/07/09 Python
python之生产者消费者模型实现详解
2019/07/27 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
PyQt5实现登录页面
2020/05/30 Python
CSS3 实现侧边栏展开收起动画
2014/12/22 HTML / CSS
部队万能检讨书
2014/02/20 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
语文教研活动总结
2014/07/02 职场文书
村官个人总结范文
2015/03/03 职场文书
婚宴新郎致辞
2015/07/28 职场文书
六一儿童节致辞
2015/07/31 职场文书
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python