详解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 相关文章推荐
Chrome Form多次提交表单问题的解决方法
May 09 Javascript
jquery动态加载js三种方法实例
Aug 03 Javascript
node.js中的fs.realpath方法使用说明
Dec 16 Javascript
针对初学者的jQuery入门指南
Aug 15 Javascript
jquery实现左右滑动菜单效果代码
Aug 27 Javascript
jquery背景跟随鼠标滑动导航
Nov 20 Javascript
JavaScript实现数据类型的相互转换
Mar 06 Javascript
jQuery 全选 全不选 事件绑定的实现代码
Jan 23 Javascript
layui分页效果实现代码
May 19 Javascript
详解webpack 多入口配置
Jun 16 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
Jun 29 Javascript
vuex实现购物车功能
Jun 28 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
Wordpress php 分页代码
2009/10/21 PHP
使用PHP提取视频网站页面中的FLASH地址的代码
2010/04/17 PHP
php中通过Ajax如何实现异步文件上传的代码实例
2011/05/07 PHP
使用PHP遍历文件夹与子目录的函数代码
2011/09/26 PHP
PHP模板引擎Smarty自定义变量调解器用法
2016/04/11 PHP
javaScript NameSpace 简单说明介绍
2013/07/18 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
AngularJS $injector 依赖注入详解
2016/09/14 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
2016/11/16 Javascript
详解Nodejs的timers模块
2016/12/22 NodeJs
JS实现的简易拖放效果示例
2016/12/29 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
详解vue-router基本使用
2017/04/18 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
2019/11/14 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
2020/03/26 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
python实现的文件同步服务器实例
2015/06/02 Python
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
python实现计数排序与桶排序实例代码
2019/03/28 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
python实现高斯投影正反算方式
2020/01/17 Python
解决Python图形界面中设置尺寸的问题
2020/03/05 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
澳大利亚玩具剧场:Toy Playhouse
2019/03/03 全球购物
瑞士设计师家具和家居饰品网上商店:Bruno Wickart
2019/03/18 全球购物
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
艺术系应届生的自我评价
2013/10/19 职场文书
教师节促销方案
2014/03/22 职场文书
师恩难忘教学反思
2014/04/27 职场文书
中层干部竞聘演讲稿
2014/05/15 职场文书
还款承诺书范文
2014/05/20 职场文书
年度评优评先方案
2014/06/03 职场文书
财务会计求职信范文
2015/03/20 职场文书