详解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 相关文章推荐
jquery ui dialog ie8出现滚动条的解决方法
Dec 06 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
Feb 13 Javascript
jquery遍历checkbox的注意事项说明
Feb 21 Javascript
javascript实现简单计算器效果【推荐】
Apr 19 Javascript
原生js编写2048小游戏
Mar 17 Javascript
使用OPENLAYERS3实现点选的方法
Sep 24 Javascript
vue中实现图片和文件上传的示例代码
Mar 16 Javascript
Nuxt使用Vuex的方法示例
Sep 06 Javascript
手把手15分钟搭一个企业级脚手架
Sep 16 Javascript
微信小程序button标签open-type属性原理解析
Jan 21 Javascript
node+vue实现文件上传功能
May 28 Javascript
详解webpack的文件监听实现(热更新)
Sep 11 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
rephactor 优秀的PHP的重构工具
2011/06/09 PHP
php判断输入是否是纯数字,英文,汉字的方法
2015/03/05 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
2017/10/24 PHP
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
JavaScript—window对象使用示例
2013/12/09 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
document.forms用法示例介绍
2014/06/26 Javascript
一个JavaScript操作元素定位元素的实例
2014/10/29 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
JS原型与继承操作示例
2019/05/09 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
Python批量按比例缩小图片脚本分享
2015/05/21 Python
详解python中__name__的意义以及作用
2019/08/07 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
python定义具名元组实例操作
2021/02/28 Python
CSS3新增布局之: flex详解
2020/06/18 HTML / CSS
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
西式结婚主持词
2014/03/14 职场文书
一年级学生评语
2014/04/23 职场文书
校车安全责任书
2014/08/25 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
导游词之苏州寒山寺
2019/12/05 职场文书
低门槛开发iOS、Android、小程序应用的前端框架详解
2021/10/16 Javascript
各种货币符号快捷输入
2022/02/17 杂记