详解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 相关文章推荐
Javascript UrlDecode函数代码
Jan 09 Javascript
基于jquery tab切换(防止页面刷新)
May 23 Javascript
用js一次改变多个input的readonly属性值的方法
Jun 11 Javascript
2014年50个程序员最适用的免费JQuery插件
Dec 15 Javascript
javascript 兼容各个浏览器的事件
Feb 04 Javascript
浅谈javascript:两种注释,声明变量,定义函数
Sep 29 Javascript
关于微信jssdk实现多图片上传的一点心得分享
Dec 13 Javascript
详解Js中的模块化是如何实现的
Oct 18 Javascript
完美解决axios跨域请求出错的问题
Feb 05 Javascript
JavaScript函数定义方法实例详解
Mar 05 Javascript
微信小程序的mpvue框架快速上手指南
May 15 Javascript
用JS实现飞机大战小游戏
Jun 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
CI框架常用方法小结
2016/05/17 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
自己动手开发jQuery插件教程
2011/08/25 Javascript
关于使用 jBox 对话框的提交不能弹出问题解决方法
2012/11/07 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
2013/07/08 Javascript
JS数组的赋值介绍
2014/03/10 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
JavaScript中操作字符串之localeCompare()方法的使用
2015/06/06 Javascript
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
微信小程序http连接访问解决方案的示例
2018/11/05 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
Vue的双向数据绑定实现原理解析
2020/02/17 Javascript
python对html代码进行escape编码的方法
2015/05/04 Python
Python 迭代器工具包【推荐】
2016/05/06 Python
python利用OpenCV2实现人脸检测
2020/04/16 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
Django自定义用户表+自定义admin后台中的字段实例
2019/11/18 Python
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
简历中个人自我评价分享
2014/03/15 职场文书
副董事长岗位职责
2014/04/02 职场文书
党日活动总结
2014/05/07 职场文书
无私奉献演讲稿
2014/09/04 职场文书
五心教育心得体会
2014/09/04 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
质量保证书
2015/01/17 职场文书
2015年检验科工作总结
2015/04/27 职场文书
重阳节座谈会主持词
2015/07/03 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书
golang 在windows中设置环境变量的操作
2021/04/29 Golang