详解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 相关文章推荐
很可爱的输入框
Aug 03 Javascript
JS的replace方法详细介绍
Nov 09 Javascript
JS.elementGetStyle(element, style)应用示例
Sep 24 Javascript
jqeury-easyui-layout问题解决方法
Mar 24 Javascript
javascript校验价格合法性实例(必须输入2位小数)
May 05 Javascript
jquery调取json数据实现省市级联的方法
Jan 29 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
Dec 11 Javascript
Bootstrap模态框(Modal)实现过渡效果
Mar 17 Javascript
浅谈HTTP 缓存的那些事儿
Oct 17 Javascript
JavaScript中常用的简洁高级技巧总结
Mar 10 Javascript
jQuery Migrate 插件用法实例详解
May 22 jQuery
微信小程序自定义纯净模态框(弹出框)的实例代码
Mar 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 discuz 主题表和回帖表的设计
2009/03/13 PHP
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
javascript与jquery中跳出循环的区别总结
2013/11/04 Javascript
jQuery拖拽 &amp; 弹出层 介绍与示例
2013/12/27 Javascript
node.js中的fs.write方法使用说明
2014/12/15 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
jquery动态添加带有样式的HTML标签元素方法
2018/02/24 jQuery
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
python3爬取数据至mysql的方法
2018/06/26 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
python os模块简单应用示例
2019/05/23 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
安装完Python包然后找不到模块的解决步骤
2020/02/13 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
keras:model.compile损失函数的用法
2020/07/01 Python
Python 代码调试技巧示例代码
2020/08/11 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
python re的findall和finditer的区别详解
2020/11/15 Python
css3实现书本翻页效果的示例代码
2021/03/08 HTML / CSS
美国标志性加大尺码时装品牌:Ashley Stewart
2016/12/15 全球购物
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
C语言编程题
2015/03/09 面试题
学校办公室主任职责
2013/12/27 职场文书
大学秋游活动方案
2014/02/11 职场文书
社区消防工作实施方案
2014/03/21 职场文书
降消项目实施方案
2014/03/30 职场文书
2014年学校工作总结
2014/11/20 职场文书
2014年防汛工作总结
2014/12/08 职场文书
雨中的树观后感
2015/06/03 职场文书