详解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 相关文章推荐
fromCharCode和charCodeAt 方法
Dec 27 Javascript
jQuery ui 1.7更新小结
Aug 15 Javascript
IE浏览器打印的页眉页脚设置解决方法
Dec 08 Javascript
jquery miniui 教程 表格控件 合并单元格应用
Nov 25 Javascript
document.all的一个比较完整的总结及案例
Jan 31 Javascript
[原创]推荐10款最热门jQuery UI框架
Aug 19 Javascript
Javascript aop(面向切面编程)之around(环绕)分析
May 01 Javascript
判断输入的字符串是否是日期格式的简单方法
Jul 11 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
Aug 05 Javascript
浅谈jQuery中事情的动态绑定
Feb 12 Javascript
Vue切换Tab动态渲染组件的操作
Sep 21 Javascript
JS实现简易图片自动轮播
Oct 16 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 图片上传代码
2011/09/13 PHP
PHP对文件夹递归执行chmod命令的方法
2015/06/19 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
2016/01/07 PHP
php中strtotime函数性能分析
2016/11/20 PHP
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
JQuery 操作Javascript对象和数组的工具函数小结
2010/01/22 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
原生javascript实现解析XML文档与字符串
2016/03/01 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
2016/12/14 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
vue生成文件本地打开查看效果的实例
2018/09/06 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
Python实现LRU算法的2种方法
2015/06/24 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
python 使用装饰器并记录log的示例代码
2019/07/12 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
Python接口自动化测试的实现
2020/08/28 Python
Python 实现一个简单的web服务器
2021/01/03 Python
css3进行截取替代js的substring
2013/09/02 HTML / CSS
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
芬兰汽车配件商店:Autonvaraosat24
2017/01/30 全球购物
神路信息Java面试题目
2013/03/31 面试题
OSPF有什么优点?为什么OSPF比RIP收敛快?
2013/02/13 面试题
remote接口和home接口主要作用
2013/05/15 面试题
大学本科生的个人自我评价
2013/12/09 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
中学生学习保证书
2015/02/26 职场文书
盗窃案辩护词
2015/05/21 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书
如何解决php-fpm启动不了问题
2021/11/17 PHP
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android