Vue插槽详解

        简介:插槽是一种实现组件之间通信的技术,能够实现父组件向子组件传递HTML结构的技术,注意不是传递数据,而是传递结构,这些结构包括:HTML元素、组件等。

目录

1、默认插槽

2、具名插槽

3、作用域插槽

4、Vue3.0的插槽


1、默认插槽

        之前我们已经知道通过在组件标签当作使用key:"values"写属性,就可以给子组件传递一些数据过去。那么我们可不可以给子组件传递一些HTML标签呢?答案是可以的,那么给子组件的标签体里面写的数据和HTML标签如何被子组件接收并进行展示呢?

        在父组件的模板当中,给子组件的标签体中添加一个HTML原生标签元素,如果需要子组件获取这个HTML元素,则需要在子组件的模板当中写一个<slot></slot>标签,这样才能接收到父组件传递过来的HTML元素。

<template><div class="container"><Category title="美食" >//传递一个img标签结构给子组件<img src="https://s3.ax1x.com/2021/01/16/srJlq0.jpg" alt=""></Category><Category title="游戏" ><ul><li v-for="(g,index) in games" :key="index">{{g}}</li></ul></Category><Category title="电影"><video controls src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"></video></Category></div>
</template><script>import Category from './components/Category'export default {name:'App',components:{Category},data() {return {games:['植物大战僵尸','红色警戒','空洞骑士','王国']}},}
</script><style scoped>.container{display: flex;justify-content: space-around;}
</style>

        上面在父组件当中给子组件传递了一个img的HTML元素,下面的子组件的<slot>则会被对应的替换掉,如果没有正确接收到父组件传递过来的HTML元素,则会显示默认值。

<template><div class="category"><h3>{{title}}分类</h3><!-- 定义一个插槽(挖个坑,等着组件的使用者进行填充) --><slot>我是一些默认值,当使用者没有传递具体结构时,我会出现</slot></div>
</template><script>export default {name:'Category',props:['title']}
</script><style scoped>.category{background-color: skyblue;width: 200px;height: 300px;}h3{text-align: center;background-color: orange;}video{width: 100%;}img{width: 100%;}
</style>

2、具名插槽

        当父组件传递过去HTML元素不止一个,而且为了保证HTML文档流的顺序,则需要通过具体的名字指定哪个HTML元素放到哪个位置。

<template><div class="container"><Category title="美食" ><img slot="center" src="https://s3.ax1x.com/2021/01/16/srJlq0.jpg" alt=""><a slot="footer" href="http://www.atguigu.com">更多美食</a></Category><Category title="游戏" ><ul slot="center"><li v-for="(g,index) in games" :key="index">{{g}}</li></ul><div class="foot" slot="footer"><a href="http://www.atguigu.com">单机游戏</a><a href="http://www.atguigu.com">网络游戏</a></div></Category><Category title="电影"><video slot="center" controls src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"></video><template v-slot:footer><div class="foot"><a href="http://www.atguigu.com">经典</a><a href="http://www.atguigu.com">热门</a><a href="http://www.atguigu.com">推荐</a></div><h4>欢迎前来观影</h4></template></Category></div>
</template><script>import Category from './components/Category'export default {name:'App',components:{Category},data() {return {games:['植物大战僵尸','红色警戒','空洞骑士','王国']}},}
</script><style>.container,.foot{display: flex;justify-content: space-around;}h4{text-align: center;}
</style>

        上面传递了两个HTML元素给子组件,下面在<slot>中使用name标注好name,让传递过来的HTML元素找到家。

<template><div class="category"><h3>{{title}}分类</h3><!-- 定义一个插槽(挖个坑,等着组件的使用者进行填充) --><slot name="center">我是一些默认值,当使用者没有传递具体结构时,我会出现1</slot><slot name="footer">我是一些默认值,当使用者没有传递具体结构时,我会出现2</slot></div>
</template><script>export default {name:'Category',props:['title']}
</script><style scoped>.category{background-color: skyblue;width: 200px;height: 300px;}h3{text-align: center;background-color: orange;}video{width: 100%;}img{width: 100%;}
</style>

3、作用域插槽

        通过默认插槽和具名插槽,我们已经知道这种方式的本质就是:给子组件传递数据的同时把一些结构带过去。那可不可以直接传结构过去,而不传数据过去呢?答案是可以的。使用作用域插槽就可以把结构传过去,而不传数据,数据使用子组件自己的。

        由于传过去的是结构,所以必须使用<template>结构<template>的形式,把结构使用<template>包起来。然后使用scope定义一个引用,这个引用就是子组件实例vc。这样就实现了值传递结构过去,还可以在父组件操作子组件的数据,实现子组件的数据向父组件传递。

        注意:在vue2.6.0之后,slot-scope被替换为v-slot指令。

父组件中:<Category><template slot-scope="scopeData"><!-- 生成的是ul列表 --><ul><li v-for="g in scopeData.games" :key="g">{{g}}</li></ul></template></Category><Category><template slot-scope="scopeData"><!-- 生成的是h4标题 --><h4 v-for="g in scopeData.games" :key="g">{{g}}</h4></template></Category>
子组件中:<template><div><slot :games="games"></slot></div></template><script>export default {name:'Category',props:['title'],//数据在子组件自身data() {return {games:['红色警戒','穿越火线','劲舞团','超级玛丽']}},}</script>

4、Vue3.0的插槽

  • slot属性弃用,具名插槽通过指令参数v-slot:插槽名的形式传入,可以简化为#插槽名
  • slot-scope属性弃用,作用域插槽通过v-slot:xxx="slotProps"的slotProps来获取子组件传出的属性
  • v-slot属性只能在template上使用,但在只有默认插槽时可以在组件标签上使用。
//Parent
<template><child><!--默认插槽--><template v-slot><div>默认插槽</div></template><!--具名插槽--><template #header><div>具名插槽</div></template><!--作用域插槽--><template #footer="slotProps"><div>{{slotProps.testProps}}</div></template><child>
</template>

        主要区别:slot、slot-scope都是组件属性名。而v-slot是Vue指令,且外层必须包裹标签<template>,也就是v-slot必须写在<template>里面,也就是<template v-slot>,只有在父组件这么写,子组件仍然写slot标签。

  1. 默认插槽slot改为:v-slot:default;
  2. 具名插槽slot="nn"改为u:v-slot:nn;
  3. 作用域插槽slot-scope="data_name"改为:v-slot:default="data_name",其中default是插槽名字,data_name是子组件数据的引用对象。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/864169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker compose部署zabbix7.0官方yaml文件方法快速搭建

环境介绍&#xff1a; 系统&#xff1a;centos7 官方文档&#xff1a;https://www.zabbix.com/documentation/current/zh/manual/installation/containers docker镜像接口配置 vi /etc/docker/daemon.json{"registry-mirrors": ["https://docker.1panel.live…

PostgreSQL判断字符串是否是json格式

PostgreSQL判断字符串是否是json格式 在PostgreSQL中如果你的字段类型是文本类型并不是json,jsonb类型的时候&#xff0c;这种情况下你要判断字段是否是json格式&#xff0c;可以创建函数is_json来进行判断(直接文本转换json可能会报异常导致sql语句失败)&#xff1a; CREATE…

电脑数据丢失该怎么恢复?分享10款数据恢复神器

在数字化时代&#xff0c;数据丢失的问题时有发生&#xff0c;无论是手机&#xff0c;还是电脑&#xff0c;总有误删、格式化等各种原因导致数据丢失。那么当电脑数据丢失后&#xff0c;我们除了从回收站中找回文件&#xff0c;还可以使用哪些方法找回文件呢&#xff1f; 本文将…

C++视觉开发 一.OpenCV环境配置

一.OpenCV安装环境配置 1.OpenCV安装 &#xff08;1&#xff09;下载 官方下载链接&#xff1a;http://opencv.org/releases 这边选择需要的版本&#xff0c;我是在windows下的4.9.0。&#xff08;科学上网下载很快&#xff0c;否则可能会有点慢&#xff09; (2)安装 双击下…

C++ lamda表达式

文章目录 概述1.捕获子句&#xff1a;2.参数列表3.箭头4.函数体&#xff1a;例子 小结 概述 先来看下基础概念。lamda表达式的一般语法如下&#xff1a; [capture] (parameters) -> return type { function body }来分析下lamda表达式的基本组成部分&#xff0c;如下几点。…

使用Java构建企业级微服务架构的策略与挑战

使用Java构建企业级微服务架构的策略与挑战 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 什么是企业级微服务架构&#xff1f; 企业级微服务架构是一种通过…

MySQL索引怎么优化

索引优化无非就是两点&#xff1a; 把SQL的写法进行优化&#xff0c;对于无法应用索引&#xff0c;或导致出现大数据量检索的语句&#xff0c;改为精准匹配的语句。对于合适的字段上建立索引&#xff0c;确保经常作为查询条件的字段&#xff0c;可以命中索引去检索数据。 连接…

同步时钟:北斗/GPS卫星、电信基站、NTP以太网校时方式的区别

同步时钟是保证各设备时间统一的重要装置&#xff0c;广泛应用于电力、通信、金融、学校、医院、地铁等多个领域。目前&#xff0c;常用的同步时钟方式包括&#xff1a;北斗/GPS卫星、电信基站、NTP以太网等。 下面跟着小编来看一下这些校时方式及他们的区别吧。 1. 北斗/GP…

另一种方式编译ZYNQ镜像

文章目录 1.创建Petalinux工程&#xff0c;生成BOOT.BIN创建Petalinux工程配置Petalinux工程生成BOOT.BIN 2.生成设备树文件3.编译kernel添加设备树文件defconfig配置menuconfig 配置编译内核源码编译设备树 4.编译rootfs5.启动开发板制作SD启动卡拷贝镜像到FAT分区将根文件系统…

Windows 安装docker详细步骤说明

文章目录 1. 检查系统要求2. 启用硬件虚拟化3. 启用Hyper-V和容器功能4. 下载并安装Docker Desktop5. 配置Docker Desktop6. 安装WSL 27. 验证Docker安装8. 常见问题排查9. 重点说明参考资源 在Windows上安装Docker的详细步骤如下&#xff1a; 1. 检查系统要求 确保您的Window…

数据库断言-数据库连接池

原因&#xff1a;现在的代码是单线程&#xff0c;如果遇到大并发的话就会崩溃&#xff0c;数据库查询就查不过来 措施&#xff1a;需要建立数据库连接池&#xff0c;可以设置连接池的数量 什么是大并发&#xff1a;很多客户端在idea写的程序和数据库建立连接 步骤&#xff1…

性能测试与负载均衡:保证Java应用的稳定性

性能测试与负载均衡&#xff1a;保证Java应用的稳定性 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 引言 在当今高度竞争的软件市场中&#xff0c;Java应用…

ubuntu 22.04启用rc.local来实现开机启动调用某些脚本

Ubuntu 22.04 中rc.local 服务并没有启用&#xff0c;手动配置的步骤如下 1、检查rc-local.service服务是否已经配置开机启动 rootmydbserver:~# systemctl is-enabled rc-local.service static2、rc-local.service文件增加2行 rootmydbserver:~# vim /lib/systemd/system/r…

SAP Build 3-调用SAP BAPI和调用S4HC API

1. 调用SAP BAPI 1.1 前提 项目已创建 SAP环境登录正常 1.2 引入BAPI SDK 商店中下载BAPI SDK Process中导入BAPI SDK 1.3 新建action group 新建action group时&#xff0c;会要求填写SAP登录信息&#xff0c;根据连接类型分为SSO&#xff0c;Basic和Custom 如果选择SS…

SAP配置发布WebService接口并调用(超级详细)

文章目录 前言一、案例介绍/笔者需求二、WebService是什么&#xff1f; a.传输协议 b.数据协议 c.WSDL d.UDDI 三、WebService 和 WebApi 的区别以及优缺点 a.主要区别 b.优缺点 四、SAP如何发布一个webser…

SpringCloud Gateway 网关获取或修改接口响应数据

文章目录 前言一、获取响应数据并打印 前言 我们的网关在之前只记录了接口请求日志&#xff0c;响应日志是没有做记录的&#xff0c;在后续别人对接我们开放平台时出现了一些问题没法确认当时的一个数值状态&#xff0c;照成了很多不必要的麻烦&#xff0c;后来决定在网关添加上…

C++编程(六)运算符重载

文章目录 一、概念1. 左值和右值2. 运算符重载3. 可以实现重载的运算符和不可以实现重载的运算符 二、双目运算符&#xff08;一&#xff09;说明&#xff08;二&#xff09;实现1. 注意点2. 算术运算符成员函数版本全局函数版本 3. 关系运算符成员函数版本全局函数版本 三、赋…

技术反诈指南丨央视报了!基于“AI换脸”的新型电信网络诈骗猖獗

目录 利用“AI换脸”技术的诈骗 技术上防范新型电信网络诈骗 内蒙古鄂尔多斯市居民李女士近日遭遇了一起新型电信网络诈骗案。诈骗团伙利用“AI换脸”技术&#xff0c;合成了与李女士老同学相似的视频通话&#xff0c;以此作为诈骗的关键手段&#xff0c;成功骗取李女士信任。 …

【linux】使用vnc连接远程桌面,需要安装tigervnc,并在服务端期待,然后在客户端使用tigervnc-viewer进行连接即可

vnc 远程设置方法 需要服务端安装软件&#xff1a; sudo apt install -y tigervnc-standalone-server# 先配置密码使用&#xff1a; tightvncpasswd启动服务&#xff0c;禁用本机 vncserver -localhost no -geometry 1924x1080 :1客户端安装软件&#xff1a; sudo apt insta…

小红书起号运营01

上次我们详细的分享了小红书怎么起号,说直白点就是,怎么开始行动,让你的想法落地。 这次的分享前提是你已经将你的发展路线也就是定位已经有了思路。 比如以现在的最火的或者最容易入门的母婴系列、装修系列以主要发展路线。 或者做一个技能博主:摄影博主、修家电等等 …