今天来分享一下vue中的slot插槽,常用elementUI的同学肯定不会陌生,特别是在用表单组件或table组件的时候,插槽的作用也被充分体现出来。

提示:本篇文章所有例子都基于vue-cli脚手架,且vue的版本是2.6.0以上。文中代码只是关键代码。

插槽,我们想象一下电脑的主板,主板上面有很多插槽,而每个插槽可能对应了不同的配置,那么在vue中,也可以这么来理解,各个插槽有各个插槽的功能,它们相互独立,可用于组件之间通信。

插槽分别有匿名插槽、具名插槽以及作用域插槽,下面分别用例子来体现它们的区别和用法。

一、匿名插槽

匿名插槽,简单来说就是没有命名的插槽,它的创建方式很简单,来看看这个例子:

// 父组件中
<lay-out>这是匿名插槽</lay-out>
// 子组件中
<slot></slot>

在父组件中的子组件标签内编辑内容,然后在子组件中使用slot标签直接接收该内容,来看页面效果:

既然父组件可以通过插槽传递一个字符串给子组件,那么也可以传递一个属性值,来看下面这段代码:

// 父组件中
<lay-out>{{slotName}}</lay-out>
data () {return {slotName: '这是父组件传给子组件的'}}
// 子组件中
<slot></slot>

上面例子父组件在子组件标签内调用父组件中的一个属性,这个属性将通过插槽传递到子组件中,来看结果:

在vue2.6.0及以上版本中,插槽使用v-slot属性,但这个属性只能写到模板标签<template>上,v-slot标签可以绑定插槽的名字,也可以不用绑定,当不绑定名字的时候,它依然是匿名插槽,我用v-slot改写一下上一个例子:

// 父组件中
<lay-out>
<template v-slot:default>{{slotName}}</template>
</lay-out>
data () {return {slotName: '这是父组件传给子组件的'}
}
// 子组件中
<slot></slot>

页面结果我就不贴了,跟上一个例子中的效果一样。v-slot:XX=””冒号后面的就是插槽名,配合具名插槽使用,如果是匿名插槽,就是default,而右边引号内部就是用来处理作用域插槽的,这个放到最后来说。

接下来,就是具名插槽了,具名插槽很明显就是具有命名的插槽,父组件可以通过插槽名来定位到是哪一个插槽,从而定向传递相应的数据,来看看例子:

// 父组件中
<lay-out>
<template v-slot:content>这是具名插槽</template>
</lay-out>
// 子组件中
<slot name="content"></slot>

子组件的slot标签上绑定一个name属性,name属性的值就是这个插槽的名字,然后父组件中在子组件标签中的模板标签上使用v-slot属性绑定这个插槽名,这时子组件和父组件之间就连接上了。来看看效果:

红色部分就是具名插槽模块。

最后来看看作用域插槽,作用域插槽我用一句话概括就是扩充父组件访问子组件中属性的权限的一个方法。想象一下,我们把父组件看作为一个函数外部的作用域,而子组件就是函数内部的局部作用域,外部作用域是无法直接访问到局部作用域中的变量的。而这里,父组件也同样无法直接访问到子组件中的属性,先来看个测试:

// 子组件中
<slot name="footer"></slot>
data () {return {navName: '这是作用域插槽'}
}
// 父组件中
<lay-out>
<template v-slot:footer>{{navName}}</template>
</lay-out>

子组件中有个navName属性,父组件中要拿到子组件这个属性,直接拿,来看看结果:

控制台直接抛出属性未定义错误,证明是不能直接拿到子组件中的属性的。想要获取到子组件中的属性,需要在子组件的slot标签上绑定该属性,再回到父组件中获取这个属性,我稍微改一下上面这段代码:

// 子组件中
<slot name="footer" :navFooter="navName"></slot>
data () {return {navName: '这是作用域插槽'}
}
// 父组件中
<lay-out>
<template v-slot:footer="slotProps">{{slotProps.navFooter}}</template>
</lay-out>

理一下这段代码,子组件中在slot标签上绑定一个自定义navFooter属性来存储子组件中的某个属性,再在父组件的子组件标签上使用v-slot属性的props来获取到子组件传过来的属性。来看看效果:

最后一条就是采用作用域插槽渲染的模块,效果没问题。

上面这个作用域插槽还有一个简单的方式来编写,在v-slot属性中,可以才用解构赋值方式拿到子组件传过来的属性,下面是修改部分的代码:

<template v-slot:footer="{navFooter}">{{navFooter}}</template>

这种解构赋值的方法得到的效果也是和上面一样,但这种写法更加简洁。

前面我分享了一篇vue组件通信的文章,而这篇是vue插槽,插槽本质上也是组件通信,光靠这两篇文章,学起来太没意思了,那就来个小案例,篇幅会比较大,我就放到下一篇分享啦~

slot多作用域 vue_vue插槽相关推荐

  1. slot多作用域 vue_vue插槽(slot)详解

    最近被问起是否了解vue的插槽(slot),咋一想发现,似乎很少用到这玩意.所以整理了下slot的一些用法. slot (父组件 在子组件处插入内容) Vue 实现了一套内容分发的 API,将元素作为 ...

  2. slot多作用域 vue_vue 深度长文之slot 篇

    今天我们将分析我们经常使用的 vue 功能 slot 是如何设计和实现的,本文将围绕 普通插槽 和 作用域插槽 以及 vue 2.6.x 版本的 v-slot 展开对该话题的讨论.当然还不懂用法的同学 ...

  3. Vue.js插槽slot和作用域插槽slot-scope学习小结

    一般来说,在Vue项目中使用父子组建时,都是把通用的HTML结构提取出来写成一个子组件,需要动态展示的数据用过prop属性传递,不过有时候我们可能想给子组件传递一个HTML代码,这个时候用prop不太 ...

  4. Vue中slot的使用(具名插槽与作用域插槽)

    文章目录 前言 一.什么是插槽 二.前期准备 三.具名插槽的使用 1.子组件配置slot 2.使用者App.vue配置数据 3.结果展示 4.具名插槽总结 四.作用域插槽的使用 1.子组件配置slot ...

  5. Vue —— 进阶插槽(slot)(默认插槽、具名插槽和作用域插槽)

    Vue全家桶 系列文章目录 内容 参考链接 Vue2.x - 基础 Vue2.x - 基础 Vue2.x - 进阶(零) 初始化脚手架 Vue2.x - 进阶(一) refs属性.props配置项 V ...

  6. slot传函数 vue_vue中的插槽slot理解

    本篇文章参考赛冷思的个人博客 1.函数默认传参 在我们写js函数我们的可能会给他们一个默认的参数,写法是 functionshow(age,name){var age = age || 20;var ...

  7. vue插槽的理解 slot slot-scop,三种插槽方式,默认插槽,具名插槽,作用域插槽

    es6写法可借鉴 父组件中的写法

  8. slot多作用域 vue_详解Vue.js 作用域、slot用法(单个slot、具名slot)

    作用域HEi免费资源网 在介绍slot前,需要先知道一个概念:编译的作用域.比如父组件中有如下模板:HEi免费资源网 {{message}} 这里的message就是一个slot,但是它绑定的是父组件 ...

  9. Vue学习Day6 插槽slot使用、编译作用域、作用域插槽、模块化开发、webpack介绍、安装

    想利用暑假时间好好学习一下vue,会记录每一天的学习内容. 今天是学习vue的第6天! 起起伏伏乃人生常态,继续加油- 学习内容 1. 插槽slot slot基本使用 具名插槽slot 2. 编译作用 ...

最新文章

  1. kali系统网络设置
  2. Unsupported major.minor version 51.0解决办法
  3. 【AngularJS】—— 8 自定义指令
  4. HDU2546_用01背包做
  5. 图标圆角角度_UI设计中图标的规范及原则【附全套视频】
  6. 大中台模式下如何构建复杂业务核心状态机组件
  7. 微服务难点剖析 | 服务拆的挺爽,问题是日志该怎么串联起来呢?
  8. 谷歌承诺未来三年将支付10亿美元新闻费用
  9. 转:浅析C++中的this指针
  10. FFmpeg总结(五)AV系列结构体之AVCodec、AVCodecParameters、AVCodecParser、AVCodecParserContext、AVCodecDescriptor
  11. 你想要的宏基因组-微生物组知识全在这(2021.8)
  12. linux通信加密软件,5个Linux加密工具:VeraCrypt,CipherShed,CryFS,GnuPG,Encfs介绍
  13. 苹果电脑怎么进入安全模式教程
  14. Shellsploit注入器简单利用
  15. 中国农业大学研究生计算机学院宿舍,中国农业大学宿舍条件怎么样
  16. [IOS APP]蛙-莫言经典有声小说
  17. bugku---啊哒
  18. 如何知道PDF是不是正常的A4大小尺寸?
  19. 基于微信小程序的校园二手商城设计与开发
  20. 串操作指令应用(MOVS/CMPS/SCAS/LODS/STOS)

热门文章

  1. spring boot项目怎么记录用户操作行为和登录时间_6 个 Github 项目拿下 Spring Boot
  2. 聚类分析在用户行为中的实例_基于行为数据的消费信贷反欺诈方案
  3. python知识总结os**
  4. Kotlin 接口(三)
  5. (计算机显示器主屏幕区域)桌面造句,部编版《语文园地四》教学反思模板(11页)-原创力文档...
  6. cookie购物车php简单,php中利用cookie实现购物车实例_PHP教程
  7. OpenShift 4 - 用Debezium+Kafka实现MySQL数据库的CDC
  8. Abp vnext Web应用程序开发教程 6 —— 作者:领域层
  9. Visual Studio 2019 16.1 正式发布,更快更高效
  10. 如何在Angular.JS中打开JSON / XML文件