Vue3中实现插槽使用

目录

一、前言

二、插槽类型

三、示例

 四、插槽的分类实现

1. 基本插槽

2. 命名插槽

3. 默认插槽内容

4. 作用域插槽(Scoped Slots)

5. 多插槽与具名插槽组合


一、前言

    在 Vue 3 中,插槽(Slot)用于实现组件的内容分发机制,它允许你将父组件的内容传递给子组件,从而实现组件的灵活组合和重用。Vue 3 插槽的基本使用和 Vue 2 有些相似,但也引入了一些新的特性。下面是一些常见的插槽使用方式。

二、插槽类型

Vue 3 插槽的使用方式非常灵活,允许你根据需求选择最适合的插槽类型:

  • 默认插槽:用于简单的内容传递。
  • 命名插槽:用于多个插槽,帮助你分配不同内容到不同的位置。
  • 作用域插槽:允许子组件传递数据给父组件,以便父组件动态渲染插槽内容。
  • 具名插槽组合:可以在一个组件中使用多个具名插槽,灵活分配父组件的内容。

三、示例

分析:

当你需要实现该页面的的布局时,是否会想到使用插槽来优化代码?以上页面中,我的任务、检测反馈、监控区域、人脸设别告警、设备总览六个模块中,框架的模板使用的是同一个框架,所以在这时就可以像以下图中进行组件优化。

代码示例:

首先,你需要在src/components/目录下创建一个子组件TaskFeedback.vue,并添加如下代码:

<template><div class="task-feedback"><!-- 使用具名插槽 --><slot name="header"></slot><!-- 默认插槽 --><slot></slot><!-- 其他插槽 --><slot name="footer"></slot></div>
</template><script>
export default {name: 'TaskFeedback',
};
</script><style scoped>
.task-feedback {/* 添加样式 */
}
</style>

然后,在父组件中引入并使用TaskFeedback组件,并通过插槽传递内容:

<!-- 在父组件中使用 TaskFeedback 组件 -->
<template><div><TaskFeedback><!-- 插入头部内容到 header 插槽 --><template v-slot:header><h1>我的任务检测反馈</h1></template><!-- 插入主要内容到默认插槽 --><table><thead><tr><th>类型</th><th>告警时间</th><th>位置</th></tr></thead><tbody><tr v-for="(item, index) in feedbackItems" :key="index"><td>{{ item.type }}</td><td>{{ item.time }}</td><td>{{ item.location }}</td></tr></tbody></table><!-- 插入底部内容到 footer 插槽 --><template v-slot:footer><p>总数据量: {{ totalDataCount }}</p></template></TaskFeedback></div>
</template><script>
import TaskFeedback from './components/TaskFeedback.vue';export default {components: {TaskFeedback,},data() {return {feedbackItems: [{ type: '温度异常', time: '2023-08-20 16:21:29', location: '园区A区' },// 更多数据...],totalDataCount: 50,};},
};
</script>

我们使用了三个插槽:

  • v-slot:header用于插入头部内容。
  • 默认插槽用于插入主要的内容。
  • v-slot:footer用于插入底部内容。

可以根据实际需要自定义每个插槽的内容,使界面更具灵活性和可扩展性。

 四、插槽的分类实现

1. 基本插槽

基本插槽允许父组件传递内容到子组件中的指定位置。父组件内容会替换子组件中指定 <slot> 标签的位置

<!-- Parent.vue -->
<template><Child><p>This is some content from the parent</p></Child>
</template><script>
import Child from './Child.vue';
export default {components: { Child }
};
</script><!-- Child.vue -->
<template><div><slot></slot>  <!-- 插槽的位置 --></div>
</template>

在这个例子中,父组件 Parent 向子组件 Child 传递了 <p> 标签内容,这些内容会替换子组件中的 <slot></slot> 部分。

2. 命名插槽

如果你需要多个插槽,可以为每个插槽指定一个名称。父组件可以将内容插入到指定的命名插槽中。

<!-- Parent.vue -->
<template><Child><template #header><h1>Header Content</h1></template><template #footer><p>Footer Content</p></template></Child>
</template><script>
import Child from './Child.vue';
export default {components: { Child }
};
</script><!-- Child.vue -->
<template><div><header><slot name="header"></slot>  <!-- 命名插槽 --></header><footer><slot name="footer"></slot>  <!-- 命名插槽 --></footer></div>
</template>

在这个例子中,父组件为 headerfooter 插槽分别传递了内容。子组件通过 <slot name="header"><slot name="footer"> 分别插入不同的内容。

3. 默认插槽内容

如果父组件没有传递内容给某个插槽,可以为插槽指定默认内容。

<!-- Parent.vue -->
<template><Child><!-- 没有传递给插槽内容,使用默认插槽内容 --></Child>
</template><script>
import Child from './Child.vue';
export default {components: { Child }
};
</script><!-- Child.vue -->
<template><div><slot>默认内容</slot>  <!-- 如果父组件没有传递内容,将使用默认内容 --></div>
</template>

当父组件没有传递任何内容时,子组件中的 <slot> 会显示默认内容“默认内容”。

4. 作用域插槽(Scoped Slots)

有时你需要在插槽中传递一些数据给父组件,这时候就需要使用作用域插槽。作用域插槽允许子组件将数据传递给父组件,让父组件能动态渲染插槽内容。

<!-- Parent.vue -->
<template><Child v-slot:default="slotProps"><p>接收到的 message: {{ slotProps.message }}</p></Child>
</template><script>
import Child from './Child.vue';
export default {components: { Child }
};
</script><!-- Child.vue -->
<template><div><slot :message="message"></slot>  <!-- 通过作用域插槽将数据传递给父组件 --></div>
</template><script>
export default {data() {return {message: 'Hello from Child!'};}
};
</script>

在这个例子中,子组件通过 v-slot 绑定了一个作用域插槽,传递了一个 message 给父组件。父组件通过 slotProps 获取到这个数据并显示。

5. 多插槽与具名插槽组合

你可以在一个组件中使用多个具名插槽,这允许父组件根据不同的插槽名称传递不同的内容。

<!-- Parent.vue -->
<template><Child><template #header><h1>This is the header</h1></template><template #main><p>This is the main content</p></template><template #footer><p>This is the footer</p></template></Child>
</template><script>
import Child from './Child.vue';
export default {components: { Child }
};
</script><!-- Child.vue -->
<template><div><header><slot name="header"></slot></header><main><slot name="main"></slot></main><footer><slot name="footer"></slot></footer></div>
</template>

这里,父组件为 headermainfooter 提供了不同的内容,子组件会根据插槽名称进行插入。 

 

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

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

相关文章

【学习笔记】科学计算

[pytorch 加速] CPU传输 & GPU计算的并行&#xff08;pin_memory&#xff0c;non_blocking&#xff09; https://www.bilibili.com/video/BV15Xxve1EtZ from IPython.display import Image import os os.environ[http_proxy] http://127.0.0.1:7890 os.environ[https_pr…

2、计算机网络七层封包和解包的过程

计算机网络osi七层模型 1、网络模型总体预览2、数据链路层4、传输层5.应用层 1、网络模型总体预览 图片均来源B站&#xff1a;网络安全收藏家&#xff0c;没有本人作图 2、数据链路层 案例描述&#xff1a;主机A发出一条信息&#xff0c;到路由器A&#xff0c;这里封装目标MAC…

在云服务器搭建 Docker

操作场景 本文档介绍如何在腾讯云云服务器上搭建和使用 Docker。本文适用于熟悉 Linux 操作系统&#xff0c;刚开始使用腾讯云云服务器的开发者。如需了解更多关于 Docker 相关信息&#xff0c;请参见 Docker 官方。 说明&#xff1a; Windows Subsystem for Linux&#xff…

Isaac Sim+SKRL机器人并行强化学习

目录 Isaac Sim介绍 OmniIssacGymEnvs安装 SKRL安装与测试 基于UR5的机械臂Reach强化学习测评 机器人控制 OMNI GYM环境编写 SKRL运行文件 训练结果与速度对比 结果分析 运行体验与建议 Isaac Sim介绍 Isaac Sim是英伟达出的一款机器人仿真平台&#xff0c;适用于做机…

【时间之外】IT人求职和创业应知【37】-AIGC私有化

目录 新闻一&#xff1a;2024智媒体50人成都会议暨每经20周年财经媒体峰会召开 新闻二&#xff1a;全球机器学习技术大会在北京召开 新闻三&#xff1a;区块链技术在金融领域的应用取得新突破 不知不觉的坚持了1个月&#xff0c;按照心理学概念&#xff0c;还要坚持2个月&am…

亿咖通科技应邀出席微软汽车行业智享会,分享ECARX AutoGPT全新实践

11月14日&#xff0c;全球出行科技企业亿咖通科技&#xff08;纳斯达克股票代码&#xff1a;ECX&#xff09;应邀于广州参加由微软举行的汽车行业智享会&#xff0c;揭晓了亿咖通科技对“AI定义汽车”时代的洞察与技术布局&#xff0c;分享了亿咖通科技汽车垂直领域大模型ECARX…

三维测量与建模笔记 - 点特征提取 - 4.3 Harris特征点

在3D重建应用中&#xff0c;很重要的一个场景是找到两幅图像中的同名特征点&#xff0c;这个过程需要对特征点进行提取和描述。 从上面描述可以看出&#xff0c;如果窗口处于颜色变化不明显或者没有变化的区域&#xff0c;E的值很小或为0&#xff1b;如果窗口处于边缘位置&…

C指针之舞——指针探秘之旅

❤博客主页&#xff1a;折枝寄北-CSDN博客 ❤专栏内容&#xff1a;C语言学习专栏https://blog.csdn.net/2303_80170533/category_12794764.html?spm1001.2014.3001.5482 指针基础学习 在之前的博客文章中&#xff0c;简单总结了指针的基础概念 我们知道了指针的概念&#xf…

[Qt platform plugin问题] Could not load the Qt platform plugin “xcb“

Qt platform plugin 是 Qt 应用程序启动时加载的插件。不同的平台有不同的插件。 常见的插件有:linuxfb Wayland xcb 简单来说就是启动一个GUI程序, 离不开这些插件.选择其中一个就好 出现这个问题要么就是没有插件&#xff0c;要么就是插件依赖的库没有。 要么就是插件选则的…

Skywalking搭建-来自于图灵课堂

Skywalking主要用于链路追踪&#xff0c;日志收集查看&#xff0c;异常日志查看&#xff0c;服务监控弱一些&#xff0c;服务器监控可以使用prometheus 一、搭建服务端&#xff0c;使用startup.bat启动 配置持久化&#xff0c;如果是用mysql持久化&#xff0c;拷贝mysql链接包…

Relaxcert SSL证书申请与自动续签之IIS

Relaxcert SSL证书申请与自动续签之IIS 1.下载安装自动续签程序2.配置客户端秘钥3.HTTP站点升级HTTPS4.关于SSL自动续签 Relaxcert SSL证书申请与自动续签工具 控制台地址 https://cert.relaxcert.com 文档地址 https://doc.relaxcert.com 1.下载安装自动续签程序 登录控制台…

spi 回环

///tx 极性0 &#xff08;sclk信号线空闲时为低电平&#xff09; /// 相位0 (在sclk信号线第一个跳变沿进行采样) timescale 1ns / 1ps//两个从机 8d01 8d02 module top(input clk ,input rst_n,input [7:0] addr ,input …

IDEA旗舰版编辑器器快速⼊门(笔记)

简介&#xff1a;javaweb开发必备软件之IDEA期间版介绍 DEA编辑器器版本介绍 官⽹网&#xff1a;https://www.jetbrains.com/地址&#xff1a;https://www.jetbrains.com/idea/download/#sectionmac DEA 分社区版(Community) 和 旗舰版(Ultimate)&#xff0c;我们做JavaWeb开…

WPF的基础控件详解

WPF的基础控件详解 在WPF学习中 基本控件是最简单也是最基础的东西。也是很初学者容易忽略的 本此笔记教程主要针对WPF中基础控件使用和应用进行手把手教学&#xff0c;如果学习了此笔记对你有帮助记得一键三连哦~~~~ TextBlock 基本用法 长字串处理 LineBreak标籤在指定的地…

MySQL的聚簇索引和二级索引

索引按照物理实现方式&#xff0c;索引可以分为 2 种&#xff1a;聚簇&#xff08;聚集&#xff09;和非聚簇&#xff08;非聚集&#xff09;索引。也可以把非聚集索引称为二级索引或者辅助索引。 一.聚簇索引 聚簇索引并不是一种单独的索引类型&#xff0c;而是一种数据存储方…

2.5D视觉——Aruco码定位检测

目录 1.什么是Aruco标记2.Aruco码解码说明2.1 Original ArUco2.2 预设的二维码字典2.3 大小Aruco二维码叠加 3.函数说明3.1 cv::aruco::detectMarkers3.2 cv::solvePnP 4.代码注解4.1 Landmark图说明4.2 算法源码注解 1.什么是Aruco标记 ArUco标记最初由S.Garrido-Jurado等人在…

能源革命持续发力,华普微隔离器助力储能行业“向绿向新”

能源是工业的粮食&#xff0c;是国民经济的命脉&#xff0c;亦是实现可持续发展的关键之处。在各国“双碳”目标战略的引领下&#xff0c;能源革命正全面席卷而来&#xff0c;而加速培育能源新质生产力&#xff0c;构建清洁低碳、安全高效的新型能源体系&#xff0c;已成为全球…

微信小程序-prettier 格式化

一.安装prettier插件 二.配置开发者工具的设置 配置如下代码在setting.json里&#xff1a; "editor.formatOnSave": true,"editor.defaultFormatter": "esbenp.prettier-vscode","prettier.documentSelectors": ["**/*.wxml"…

sapiens推理的安装与使用

文章目录 1、安装1.1 克隆代码库1.2 设置 Sapiens-Lite 的代码路径1.3 创建 Conda 环境并安装必要的依赖1.4 下载模型检查点 2、推理 sapiens&#xff0c;是meta发布的以人为中心的视觉大模型&#xff0c;"sapiens"这个词来源于拉丁语&#xff0c;意为“智慧的”或“…

leetcode-44-通配符匹配

题解&#xff1a; 代码&#xff1a; 参考&#xff1a; (1)牛客华为机试HJ71字符串通配符 (2)leetcode-10-正则表达式匹配