详解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编程起步(第六课)
Feb 27 Javascript
setTimeout和setInterval的浏览器兼容性分析
Feb 27 Javascript
JavaScript 常见对象类创建代码与优缺点分析
Dec 07 Javascript
利用javascript解决图片缩放及其优化的代码
May 23 Javascript
JS仿百度搜索自动提示框匹配查询功能
Nov 21 Javascript
js字符串操作方法实例分析
May 06 Javascript
好好了解一下Cookie(强烈推荐)
Jun 14 Javascript
利用Vue实现移动端图片轮播组件的方法实例
Aug 23 Javascript
JavaScript实现简单的文本逐字打印效果示例
Apr 12 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
Aug 13 jQuery
vue-quill-editor+plupload富文本编辑器实例详解
Oct 19 Javascript
jquery弹窗时禁止body滚动条滚动的例子
Sep 21 jQuery
详解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
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
php中JSON的使用与转换
2015/01/14 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
在Debian系统下配置LNMP的教程
2015/07/09 PHP
php根据日期或时间戳获取星座信息和生肖等信息
2015/10/20 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
IE关闭时判断及AJAX注销案例学习
2013/02/18 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
2013/12/17 Javascript
jQuery实现文本框邮箱输入自动补全效果
2015/11/17 Javascript
微信小程序中的swiper组件详解
2017/04/14 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
python中的闭包用法实例详解
2015/05/05 Python
Python入门教程之if语句的用法
2015/05/14 Python
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
Python实现Mysql数据统计及numpy统计函数
2019/07/15 Python
python匿名函数用法实例分析
2019/08/03 Python
深入学习python多线程与GIL
2019/08/26 Python
Python笔试面试题小结
2019/09/07 Python
python扫描线填充算法详解
2020/02/19 Python
幼儿园大班新学期寄语
2014/01/18 职场文书
运动会领导邀请函
2014/02/05 职场文书
交警个人先进事迹材料
2014/05/11 职场文书
党的群众路线教育实践活动个人整改方案
2014/09/21 职场文书
工作收入证明模板
2014/10/10 职场文书
2014年社区矫正工作总结
2014/11/18 职场文书
教师节感谢信
2015/01/22 职场文书
起诉状范本
2015/05/20 职场文书
自荐信范文
2019/05/20 职场文书
浅谈Python列表嵌套字典转化的问题
2021/04/07 Python
mysql查询的控制语句图文详解
2021/04/11 MySQL
CSS3实现的水平标题菜单
2021/04/14 HTML / CSS