详解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异步请求实例代码
Jun 21 Javascript
JavaScript弹出窗口方法汇总
Aug 12 Javascript
分享一个自己动手写的jQuery分页插件
Aug 28 Javascript
js实现鼠标滚轮控制图片缩放效果的方法
Feb 20 Javascript
js实现的牛顿摆效果
Mar 31 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
Feb 20 Javascript
jQuery实现简单的抽奖游戏
May 05 jQuery
详谈JS中数组的迭代方法和归并方法
Aug 11 Javascript
教你用Cordova打包Vue项目的方法
Oct 17 Javascript
Vue源码解读之Component组件注册的实现
Aug 24 Javascript
详解vue-router传参的两种方式
Sep 10 Javascript
小程序分页实践之编写可复用分页组件
Jul 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
微信公众平台开发关注及取消关注事件的方法
2014/12/23 PHP
php实现根据词频生成tag云的方法
2015/04/17 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
php将html转为图片的实现方法
2017/05/19 PHP
实例讲解php实现多线程
2019/01/27 PHP
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
教你用AngularJS框架一行JS代码实现控件验证效果
2014/06/23 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
通过jquery的ajax请求本地的json文件方法
2018/08/08 jQuery
微信小程序实现登录遮罩效果
2018/11/01 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
Python代码调试的几种方法总结
2015/04/15 Python
Python中用max()方法求最大值的介绍
2015/05/15 Python
简单谈谈python中的lambda表达式
2018/01/19 Python
Pyspark读取parquet数据过程解析
2020/03/27 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
2020/04/20 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
Python非单向递归函数如何返回全部结果
2020/12/18 Python
python热力图实现简单方法
2021/01/29 Python
浅析python连接数据库的重要事项
2021/02/22 Python
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
国际象棋商店:The Chess Store
2018/07/09 全球购物
美国领先的眼镜和太阳镜在线零售商:Glasses.com
2019/08/26 全球购物
final, finally, finalize的区别
2012/03/01 面试题
建筑设计师岗位职责
2013/11/18 职场文书
给海归自荐信的建议
2013/12/13 职场文书
校园新闻广播稿
2014/01/10 职场文书
学习十八届三中全会精神实施方案
2014/02/17 职场文书
教师节倡议书
2014/08/30 职场文书
2015年环卫工作总结
2015/04/28 职场文书
教师听课学习心得体会
2016/01/15 职场文书
2019幼儿教师求职信(3篇)
2019/09/20 职场文书