详解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 ajax cache缓存问题
Jul 01 Javascript
JS操作Cookies包括(读取添加与删除)
Dec 26 Javascript
angularjs中的e2e测试实例
Dec 06 Javascript
使用JavaScript实现旋转的彩圈特效
Jun 23 Javascript
IONIC自定义subheader的最佳解决方案
Sep 22 Javascript
Angular的模块化(代码分享)
Dec 26 Javascript
JavaScript用200行代码制作打飞机小游戏实例
Jun 21 Javascript
JavaScript中document.referrer的用法详解
Jul 04 Javascript
react-native DatePicker日期选择组件的实现代码
Sep 12 Javascript
vue.js购物车添加商品组件的方法
Sep 17 Javascript
JS实现前端动态分页码代码实例
Jun 02 Javascript
在vue项目中promise解决回调地狱和并发请求的问题
Nov 09 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
PHP自动更新新闻DIY
2006/10/09 PHP
php学习 字符串课件
2008/06/15 PHP
PHP 上传文件的方法(类)
2009/07/30 PHP
浅析PHP Socket技术
2013/08/02 PHP
PHP include任意文件或URL介绍
2014/04/29 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
浅谈PHP的反射API
2017/02/26 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
2017/05/05 PHP
DOM Scripting中的图片切换[兼容Firefox]
2010/06/12 Javascript
javascript工具库代码
2012/03/29 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
JavaScript函数内部属性和函数方法实例详解
2016/03/17 Javascript
JS函数的定义与调用方法推荐
2016/05/12 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
js实现手机发送验证码功能
2017/03/13 Javascript
用React实现一个完整的TodoList的示例代码
2017/10/30 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
基于Vue CSR的微前端实现方案实践
2020/05/27 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
2020/07/17 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
python获取豆瓣电影简介代码分享
2014/01/16 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
2016/06/30 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
django 控制页面跳转的例子
2019/08/06 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
Python xlrd excel文件操作代码实例
2020/03/10 Python
Python常用编译器原理及特点解析
2020/03/23 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
Python实现手绘图效果实例分享
2020/07/22 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
css3实现一款模仿iphone样式的注册表单
2013/03/20 HTML / CSS
中学生自我评价范文
2014/02/08 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
婚礼必备主持词范本!
2019/07/23 职场文书
MySQL添加索引特点及优化问题
2022/07/23 MySQL