详解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 相关文章推荐
jquery无缝向上滚动实现代码
Mar 29 Javascript
改变状态栏文字的js代码
Jun 13 Javascript
简单的渐变轮播插件
Jan 12 Javascript
js数字舍入误差以及解决方法(必看篇)
Feb 28 Javascript
为Jquery EasyUI 组件加上清除功能的方法(详解)
Apr 13 jQuery
Vue 进阶教程之v-model详解
May 06 Javascript
解决Vue页面固定滚动位置的处理办法
Jul 13 Javascript
浅谈Angular4中常用管道
Sep 27 Javascript
vue侧边栏动态生成下级菜单的方法
Sep 07 Javascript
详解Vue This$Store总结
Dec 17 Javascript
解决vue-photo-preview 异步图片放大失效的问题
Jul 29 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
Aug 07 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桌面中心(一) 创建数据库
2007/03/11 PHP
php常用字符串处理函数实例分析
2014/11/22 PHP
php实现在服务器上创建目录的方法
2015/03/16 PHP
php微信公众号开发模式详解
2016/11/28 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
js 小数取整的函数
2010/05/10 Javascript
jQuery之尺寸调整组件的深入解析
2013/06/19 Javascript
js给页面加style无效果的解决方法
2014/01/20 Javascript
百度地图自定义控件分享
2015/03/04 Javascript
js判断子窗体是否关闭的方法
2015/08/11 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
2017/07/07 Javascript
js实现前端图片上传即时预览功能
2017/08/02 Javascript
ionic3 懒加载
2017/08/16 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
2020/02/14 Javascript
详解Vue.js 响应接口
2020/07/04 Javascript
浅谈Python中的数据类型
2015/05/05 Python
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
python识别验证码的思路及解决方案
2020/09/13 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
2021/01/12 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
英国门销售网站:Green Tree Doors
2020/01/07 全球购物
中科创达面试题
2016/12/28 面试题
酒店总经理工作职责
2013/12/13 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
销售督导岗位职责
2015/04/10 职场文书