当前位置: 首页 > news >正文

Vue.js 使用插槽(Slots)优化组件结构

Vue.js 使用插槽(Slots)优化组件结构

今天我们聊聊 Vue.js 的一个超实用功能——插槽(Slots)。插槽是 Vue 组件开发中的神器,用好它,你可以让组件变得更灵活、更可复用,还能写出优雅的代码结构。

一、什么是插槽?

插槽其实就是占位符,它允许我们在使用组件时,往组件的指定位置插入内容。

你可以把插槽想象成“一个盒子”,组件开发者提供了盒子,而使用组件的人可以往盒子里放任何东西。是不是很有趣?

一个简单的例子

假设我们有一个组件叫 MyButton,需要在按钮内部显示一些文字:

<template><button class="my-button"><slot>默认按钮</slot></button>
</template>

上面这个 slot 就是插槽。如果你不传内容,它会显示默认值“默认按钮”。如果你传了内容,插槽会替换默认内容:

<MyButton>提交</MyButton>

最终渲染出来的是:

<button class="my-button">提交</button>

这样是不是比写死文本灵活多了?

二、命名插槽

有时候,一个组件里可能需要多个插槽,比如对话框的标题和正文部分。如果都用默认插槽,代码可能会乱套。所以 Vue 提供了命名插槽

定义一个对话框组件

<template><div class="dialog"><header><slot name="header">默认标题</slot></header><main><slot>默认内容</slot></main><footer><slot name="footer">默认底部</slot></footer></div>
</template>

使用组件时传递内容

<MyDialog><template #header><h1>自定义标题</h1></template><p>这是正文内容</p><template #footer><button>确认</button><button>取消</button></template>
</MyDialog>

渲染结果

<div class="dialog"><header><h1>自定义标题</h1></header><main><p>这是正文内容</p></main><footer><button>确认</button><button>取消</button></footer>
</div>

小结

slotname 属性定义插槽。在使用组件时,用 #插槽名v-slot:插槽名 指定内容插入到哪个插槽。

三、作用域插槽

有时候,组件内部会生成一些数据,使用组件的人可能需要用到这些数据。这种情况下,可以用作用域插槽

一个例子:列表渲染

假设我们有一个 ItemList 组件,它渲染了一组数据:

<template><ul><slot v-for="(item, index) in items" :item="item" :index="index" :key="index"><li>{{ item }}</li></slot></ul>
</template><script>
export default {props: {items: {type: Array,required: true,}}
};
</script>

组件内部用 v-for 循环渲染每个数据项,并通过 :item:index 将这些数据传递给作用域插槽。

使用组件时自定义内容

使用者可以通过作用域插槽自定义每个列表项的显示格式:

<ItemList :items="['苹果', '香蕉', '橙子']"><template #default="{ item, index }"><li>{{ index + 1 }} - {{ item }} 🍎</li></template>
</ItemList>

渲染结果

假设传入的数据是 ['苹果', '香蕉', '橙子'],最终页面显示:

<ul><li>1 - 苹果 🍎</li><li>2 - 香蕉 🍎</li><li>3 - 橙子 🍎</li>
</ul>

作用域插槽的优势

作用域插槽可以让组件开发者只关注数据逻辑,而把显示逻辑交给使用者,这样既能提升灵活性,也能减少组件内部的定制代码。

四、总结

插槽(Slots)是 Vue 组件开发中必不可少的工具。通过插槽,你可以让组件更加灵活、可复用。

  1. 默认插槽:最简单的占位符,适合简单的内容插入。
  2. 命名插槽:当组件需要多个插槽时,用命名插槽管理更清晰。
  3. 作用域插槽:在插槽中传递数据,方便使用者自定义内容。

相关文章:

Vue.js 使用插槽(Slots)优化组件结构

Vue.js 使用插槽&#xff08;Slots&#xff09;优化组件结构 今天我们聊聊 Vue.js 的一个超实用功能——插槽&#xff08;Slots&#xff09;。插槽是 Vue 组件开发中的神器&#xff0c;用好它&#xff0c;你可以让组件变得更灵活、更可复用&#xff0c;还能写出优雅的代码结构…...

Broker如何进行定时心跳发送和故障感知

1.前言 此文章是在儒猿课程中的学习笔记&#xff0c;感兴趣的想看原来的课程可以去咨询儒猿课堂《从0开始带你成为RocketMQ高手》&#xff0c;我本人觉得这个作者还是不错&#xff0c;都是从场景来进行分析&#xff0c;感觉还是挺适合我这种小白的。这块主要都是我自己的学习笔…...

网络安全设备主要有什么

网络安全设备指的肯定是硬件设备了&#xff0c;国内卖安全硬件的没几家&#xff0c;天融信&#xff0c;启明星辰&#xff0c;绿盟&#xff0c;深信服&#xff0c;就这四家卖的比较齐全吧&#xff0c;上它们官网看一下&#xff0c;就知道市面上主要的网络安全设备有哪些了。分类…...

Android Framework WMS全面概述和知识要点

一、概述 定义与作用 在 Android 系统中&#xff0c;WindowManagerService&#xff08;WMS&#xff09;就像是一个大管家&#xff0c;负责管理整个系统的窗口界面。它是 Android Framework 的核心组件之一&#xff0c;处于 system_server 进程内&#xff0c;在 Framework 层占…...

记一次某红蓝演练经历

在某天接到任务&#xff0c;对xxx进行一次红蓝演练&#xff0c;于是把自己渗透过程给记录下来&#xff0c;漏洞关键地方也会打码&#xff0c;希望各位大佬理解&#xff0c;菜鸡一枚&#xff0c;勿喷/(ㄒoㄒ)/~~ 概述 拿到目标域名第一件事就是信息收集&#xff0c;曾经一位大…...

一个运行在浏览器中的开源Web操作系统Puter本地部署与远程访问

文章目录 前言1.关于Puter2.本地部署Puter3.Puter简单使用4. 安装内网穿透5.配置puter公网地址6. 配置固定公网地址 &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击跳转到网站…...

【零基础入门Go语言】struct 和 interface:Go语言是如何实现继承的?

提到面向对象编程中的继承&#xff0c;许多人脑海中可能会浮现出 Java、C 等语言中那一套熟悉的类继承体系。然而&#xff0c;Go 语言作为一门别具一格的编程语言&#xff0c;并没有遵循传统的继承模式。那么&#xff0c;在 Go 语言的世界里&#xff0c;它是怎样实现类似于继承…...

麦田物语学习笔记:实现拖拽物品交换数据和在地图上生成物品

基本流程 1.代码思路 (1)InventoryUI的PlayerSlots与PlayerBag里一一对应,所以想要实现交换数据实际上是,先拿到被拖拽的物体所对的Slot的序号和目标的Slot序号,然后将这两个序号对调一下 (2)物品交换的数据逻辑应该在InventoryManager里去调用,因为InventoryManager里管理了p…...

一些计算机零碎知识随写(25年1月)-1

我原以为世界上有技术的那批人不会那么闲&#xff0c;我错了&#xff0c;被脚本真实了。 今天正隔着画画呢&#xff0c;手机突然弹出几条安全告警通知。 急忙打开服务器&#xff0c;发现问题不简单&#xff0c;直接关服务器重装系统..... 首先&#xff0c;不要认为小网站&…...

Qt学习笔记第81到90讲

第81讲 串口调试助手实现自动发送 为这个名叫“定时发送”的QCheckBox编写槽函数。 想要做出定时发送的效果&#xff0c;必须引入QT框架下的毫秒级定时器QTimer&#xff0c;查阅手册了解详情。 在widget.h内添加新的私有成员变量&#xff1a; QTimer *timer; 在widget类的构造…...

Centos9 + Docker 安装 MySQL8.4.0 + 定时备份数据库到本地

Centos9 Docker 安装 MySQL8.4.0 定时备份数据库到本地 创建目录&#xff0c;创建配置文件启动容器命令定时备份MySQL执行脚本Linux每日定时任务命令文件内参数其他时间参数 AT一次性定时任务 创建目录&#xff0c;创建配置文件 $ mkdir -p /opt/mysql/conf$ vim /opt/mysql/…...

网络原理一>UDP协议详解

UDP和TCP都是应用层中的重要协议&#xff0c;如果做基础架构开发&#xff0c;会用得多一些。 这一篇我们先简单聊一下的UDP TCP格式呈现&#xff1a; 我们知道UDP是一种无连接&#xff0c;面向数据报&#xff0c;全双工&#xff0c;不可靠传输特性的网络协议。 基本格式如图…...

MySQL的小问题

编码问题 不管官方使用什么编码&#xff1a;latin1、gbk、utf8、utfmb4。统一使用utfmb4 MySQL中的utf8并不是utf-8&#xff0c;它省略了一个字节&#xff0c;只是用三个字节存储所有的符号&#xff0c;utfmb4才是utf-8 远程登录问题&#xff1a; MySQL官方默认没有启动远程…...

Mac——Docker desktop安装与使用教程

摘要 本文是一篇关于Mac系统下Docker Desktop安装与使用教程的博文。首先介绍连接WiFi网络&#xff0c;然后详细阐述了如何在Mac上安装Docker&#xff0c;包括下载地址以及不同芯片版本的选择。接着讲解了如何下载基础镜像和指定版本镜像&#xff0c;旨在帮助用户在Mac上高效使…...

FastApi Swagger 序列化问题

问题 错误现象&#xff1a; fastapi的 swagger 界面无法正常打开控制台报错&#xff1a;raise PydanticInvalidForJsonSchema(fCannot generate a JsonSchema for {error_info}) 详细报错&#xff1a; File "d:\Envs\miniconda3\envs\xdagent\lib\site-packages\pydan…...

《机器学习》——sklearn库中CountVectorizer方法(词频矩阵)

CountVectorizer方法介绍 CountVectorizer 是 scikit-learn 库中的一个工具&#xff0c;它主要用于将文本数据转换为词频矩阵&#xff0c;而不是传统意义上的词向量转换&#xff0c;但可以作为词向量转换的一种基础形式。用于将文本数据转换为词频矩阵&#xff0c;它是文本特征…...

UML系列之Rational Rose笔记三:活动图(泳道图)

一、新建活动图&#xff08;泳道图&#xff09; 依旧在用例视图里面&#xff0c;新建一个activity diagram&#xff1b;新建好之后&#xff0c;就可以绘制活动图了&#xff1a; 正常每个活动需要一个开始&#xff0c;点击黑点&#xff0c;然后在图中某个位置安放&#xff0c;接…...

Java面向对象面经总结

目录 面向对象基础 面向对象与面向过程的区别 创建一个对象用什么运算符&#xff0c;对象实体与对象引用的区别 对象相等和引用相等的区别 构造方法的特点&#xff0c;是否可被重写&#xff1f; 面向对象三大特征 封装 继承 多态 接口和抽象类的共同点和区别 深拷贝…...

红队工具使用全解析:揭开网络安全神秘面纱一角

红队工具使用全解析&#xff1a;揭开网络安全神秘面纱一角 B站红队公益课&#xff1a;https://space.bilibili.com/350329294 学习网盘资源链接&#xff1a;https://pan.quark.cn/s/4079487939e8 嘿&#xff0c;各位网络安全爱好者们&#xff01;在风云变幻的网络安全战场上&am…...

OpenLinkSaas 2025年第一季度开发计划

OpenLinkSaas在2025的发展方向是强化基础设施和研发协作&#xff0c;弱化管理相关的功能。 为了根据参与到软件研发的整个流程&#xff0c;OpenLinkSaas会增加一系列的基础设施项目&#xff0c;并和OpenLinksaas进行深度整合。 目前计划中的基础设施: 链路追踪系统(OpenDragonF…...

5分钟掌握Fideo:终极免费直播录制软件使用指南

5分钟掌握Fideo&#xff1a;终极免费直播录制软件使用指南 【免费下载链接】fideo-live-record A convenient live broadcast recording software! Supports Tiktok, Youtube, Twitch, Bilibili, Bigo!(一款方便的直播录制软件! 支持tiktok, youtube, twitch, 抖音&#xff0c;…...

EPSON RX8010SJ RTC与Nordic TWI实战:I2C通讯时序详解与避坑指南

EPSON RX8010SJ RTC与Nordic TWI实战&#xff1a;I2C通讯时序详解与避坑指南 在嵌入式系统中&#xff0c;实时时钟&#xff08;RTC&#xff09;模块是许多应用的核心组件之一。EPSON RX8010SJ作为一款低功耗、高精度的RTC芯片&#xff0c;广泛应用于物联网设备、可穿戴设备和工…...

GDBFrontend安全部署指南:保护调试会话的5个最佳实践

GDBFrontend安全部署指南&#xff1a;保护调试会话的5个最佳实践 【免费下载链接】gdb-frontend ☕ GDBFrontend is an easy, flexible and extensible gui debugger. Try it on https://debugme.dev 项目地址: https://gitcode.com/gh_mirrors/gd/gdb-frontend GDBFron…...

Awoo Installer:破解Switch游戏安装限制的高性能解决方案

Awoo Installer&#xff1a;破解Switch游戏安装限制的高性能解决方案 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer Awoo Installer是一款专为破解…...

高速公路能耗管理系统方案

对高速公路运营商来说&#xff0c;面对隧道、收费站、服务区等各类站点&#xff0c;仅仅了解电力公司的缴费数据是不够的。由于缺乏用能过程的明细数据&#xff0c;无法进行有效的能耗分析和成本分析&#xff0c;导致节能策略无从实施&#xff0c;影响到企业的经营效益。现场已…...

PyTorch 2.8镜像实操手册:基于40G数据盘的视频生成训练环境搭建

PyTorch 2.8镜像实操手册&#xff1a;基于40G数据盘的视频生成训练环境搭建 1. 环境准备与快速部署 在开始视频生成训练之前&#xff0c;我们需要先准备好硬件环境和镜像部署。本镜像专为RTX 4090D显卡优化&#xff0c;配备了24GB显存和CUDA 12.4支持&#xff0c;能够高效处理…...

Zotero GPT插件全攻略:打造智能化文献管理工作流

Zotero GPT插件全攻略&#xff1a;打造智能化文献管理工作流 【免费下载链接】zotero-gpt GPT Meet Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-gpt 学术研究中&#xff0c;文献管理往往耗费研究者大量时间与精力。Zotero GPT插件将人工智能技术与文献…...

3个高效步骤解决猫抓扩展资源嗅探故障

3个高效步骤解决猫抓扩展资源嗅探故障 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓&#xff08;Cat Catch&#xff09;作为一款浏览器资源嗅…...

Docker测试学习思路

Docker 核心概念学习与实战指南本文系统梳理 Docker 学习的核心思路与方法&#xff0c;用通俗类比帮助理解 Docker 的本质&#xff0c;涵盖镜像构建、容器运行、网络通信、数据持久化、资源限制五大核心能力&#xff0c;适合初学者建立清晰的 Docker 知识框架。一、Docker 到底…...

VideoAgentTrek-ScreenFilter模型压缩与量化教程:在边缘设备上实现轻量部署

VideoAgentTrek-ScreenFilter模型压缩与量化教程&#xff1a;在边缘设备上实现轻量部署 想让一个原本需要强大GPU才能流畅运行的视频分析模型&#xff0c;在树莓派或者Jetson Nano这类小巧的边缘设备上也能跑起来吗&#xff1f;这听起来像是个不可能的任务&#xff0c;但通过模…...