Vue 插槽(Slot)用法详解

插槽(Slot)是Vue中一种强大的内容分发机制,它允许你在组件中定义可替换的内容区域,为组件提供了更高的灵活性和可复用性。本文将全面介绍Vue插槽的各种用法。

1. 基本插槽

基本插槽是最简单的插槽形式,它允许父组件向子组件插入内容。

子组件定义插槽:

<!-- ChildComponent.vue -->
<template><div class="child"><h2>子组件标题</h2><slot></slot>  <!-- 插槽位置 --><p>子组件底部内容</p></div>
</template>

父组件使用:

<template><ChildComponent><p>这是插入到子组件中的内容</p></ChildComponent>
</template>

2. 后备内容(默认内容)

插槽可以设置默认内容,当父组件没有提供内容时显示。

<!-- ChildComponent.vue -->
<template><button type="submit"><slot>提交</slot>  <!-- 默认显示"提交" --></button>
</template>

3. 具名插槽

当一个组件需要多个插槽时,可以使用具名插槽。

子组件定义:

<!-- BaseLayout.vue -->
<template><div class="container"><header><slot name="header"></slot></header><main><slot></slot>  <!-- 默认插槽,没有name属性 --></main><footer><slot name="footer"></slot></footer></div>
</template>

父组件使用:

<template><BaseLayout><template v-slot:header><h1>这里是页眉</h1></template><p>这里是主内容,会放入默认插槽</p><template v-slot:footer><p>这里是页脚</p></template></BaseLayout>
</template>

4. 作用域插槽

作用域插槽允许子组件向插槽传递数据,父组件可以决定如何渲染这些数据。

子组件定义:

<!-- TodoList.vue -->
<template><ul><li v-for="(item, index) in items" :key="index"><slot :item="item" :index="index"></slot></li></ul>
</template><script>
export default {data() {return {items: ['吃饭', '睡觉', '写代码']}}
}
</script>

父组件使用:

<template><TodoList><template v-slot:default="slotProps"><span v-if="slotProps.index % 2 === 0">✓</span>{{ slotProps.item }}</template></TodoList>
</template>

5. 解构插槽Prop

在作用域插槽中,可以使用ES6解构语法简化代码:

<template><TodoList><template v-slot:default="{ item, index }"><span v-if="index % 2 === 0">✓</span>{{ item }}</template></TodoList>
</template>

6. 动态插槽名

插槽名可以是动态的:

<template><base-layout><template v-slot:[dynamicSlotName]>...</template></base-layout>
</template><script>
export default {data() {return {dynamicSlotName: 'header'}}
}
</script>

7. 缩写语法

Vue提供了插槽的缩写语法:

  • v-slot:header 可以简写为 #header

  • 默认插槽 v-slot:default 可以简写为 v-slot 或 #default

<template><BaseLayout><template #header><h1>页眉</h1></template><template #default><p>主内容</p></template><template #footer><p>页脚</p></template></BaseLayout>
</template>

8. 高级用法:插槽函数

插槽可以像函数一样使用,实现更灵活的内容分发:

子组件:

<template><div><slot :user="user" :isLoggedIn="isLoggedIn"></slot></div>
</template><script>
export default {data() {return {user: { name: '张三', age: 30 },isLoggedIn: true}}
}
</script>

父组件:

<template><UserComponent><template v-slot="{ user, isLoggedIn }"><div v-if="isLoggedIn">欢迎, {{ user.name }}! 您已经{{ user.age }}岁了。</div><div v-else>请登录</div></template></UserComponent>
</template>

总结

Vue插槽提供了强大的内容分发机制,通过基本插槽、具名插槽、作用域插槽等特性,可以创建高度可复用和灵活的组件。掌握插槽的使用可以显著提升Vue组件的开发效率和可维护性。

在实际开发中,插槽常用于构建布局组件、高阶组件(HOC)、列表渲染等场景,是Vue组件化开发的重要工具之一。

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

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

相关文章

C++ 标准模板库(STL)详解文档

C 标准模板库&#xff08;STL&#xff09;详解文档 1 前言2 常用容器2.1 内容总览2.2 向量 vector2.2.1 概述2.2.2 常用方法2.2.3 适用场景2.2.4 注意事项 2.3 栈 stack2.3.1 概述2.3.2 常用方法2.3.3 注意事项 2.4 队列 queue2.4.1 概述2.4.2 常用方法2.4.3 注意事项 2.5 优先…

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…

Redis(02)Win系统如何将Redis配置为开机自启的服务

一、引言 Redis 是一款高性能的键值对存储数据库&#xff0c;在众多项目中被广泛应用。在 Windows 环境下&#xff0c;为了让 Redis 能更稳定、便捷地运行&#xff0c;将其设置为系统服务并实现自动启动是很有必要的。这样一来&#xff0c;系统开机时 Redis 可自动加载&#xf…

apex新版貌似移除了amp从源码安装方式装的话会在from apex import amp时报错

问题&#xff1a; 安装完apex结果 from apex import amp会报错 解决方法&#xff1a; # apex git clone https://github.com/NVIDIA/apex cd apex # https://github.com/modelscope/ms-swift/issues/4176 git checkout e13873debc4699d39c6861074b9a3b2a02327f92 pip insta…

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…

leetcode题解450:删除BST中的结点!调整二叉树的结构最难!

一、题目内容 题目要求删除二叉搜索树&#xff08;BST&#xff09;中值为 key 的节点&#xff0c;并保证删除后二叉搜索树的性质不变。返回删除节点后的二叉搜索树的根节点的引用。一般来说&#xff0c;删除节点可分为两个步骤&#xff1a;首先找到需要删除的节点&#xff1b;如…

让 Kubernetes (K8s) 集群 使用 GPU

要让 Kubernetes (K8s) 集群 使用 GPU&#xff0c;并且节点是 KVM 虚拟化 出来的&#xff0c;需要确保以下几点&#xff1a; KVM 虚拟机透传 GPU&#xff08;PCIe Passthrough&#xff09; 宿主机和 K8s 节点正确安装 NVIDIA 驱动 K8s 集群安装 nvidia-device-plugin Pod 配…

Android第十七次面试总结(Java数据结构)

一、Java 集合体系核心架构与高频考点 1. 集合体系架构图 Java集合框架 ├─ Collection&#xff08;单列集合&#xff09; │ ├─ List&#xff08;有序、可重复&#xff09; │ │ ├─ ArrayList&#xff08;动态数组&#xff0c;随机访问快&#xff09; │ │ ├─…

Linux 删除登录痕迹

本文介绍相对彻底的删除 Linux 的登录痕迹&#xff0c;操作前确保已经可以拿到能提权ROOT令牌的系统管理权限。 当然&#xff0c;仍可以先查阅以下文章。 Linux 删除用户终端命令行操作记录-CSDN博客 1、清楚当前会话记录 history -c # 清空当前终端内存中的历史命令 2、永…

Lighttpd 配置选项介绍

根据提供的 Lighttpd 配置选项文档&#xff08;https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ConfigurationOptions &#xff09;&#xff0c;以下是所有配置选项的详细解释、作用及适用场景&#xff0c;按模块分组说明&#xff1a; 以下是对 Lighttpd 配置选项 …

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…

Python 训练营打卡 Day 40-训练和测试的规范写法

一.单通道图片的规范写法 以之前的MNIST数据集为例 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader , Dataset # DataLoader 是 PyTorch 中用于加载数据的工具 from torchvision import datasets, transforms # t…

Java 枚举(Enum)的使用说明

在 Java 中&#xff0c;枚举&#xff08;Enum&#xff09;是一种特殊的数据类型&#xff0c;用于定义一组固定的命名常量。它比传统的常量&#xff08;如 public static final&#xff09;更安全、更灵活&#xff0c;且支持面向对象特性。以下是枚举的详细用法&#xff1a; 1. …

Docker部署Nginx-UI

使用如下命令拉取运行nginx-ui软件 docker run -dit \ --namenginx-ui \ --restartalways \ -e TZAsia/Shanghai \ -v /mnt/user/appdata/nginx:/etc/nginx \ -v /mnt/user/appdata/nginx-ui:/etc/nginx-ui \ -v /var/run/docker.sock:/var/run/docker.sock \ -…

OkHttp 3.0源码解析:从设计理念到核心实现

本文通过深入分析OkHttp 3.0源码&#xff0c;揭示其高效HTTP客户端的实现奥秘&#xff0c;包含核心设计理念、关键组件解析、完整工作流程及实用技巧。 一、引言&#xff1a;为什么选择OkHttp&#xff1f; 在Android和Java生态中&#xff0c;OkHttp已成为HTTP客户端的标准选择…

洛谷P12170 [蓝桥杯 2025 省 Python B] 攻击次数

题目传送门 思路 首先定义一个数 n n n ,初值为 2025 2025 2025,从第一回合开始,三个英雄持续攻击,攻击方式为: 第一个英雄: 每回合攻击 5 5 5

百度之星2021——BD202104 萌新

输入格式&#xff1a; 本题有多组测试数据。 第一行一个数 T (1 ≤ T ≤ 1000) 表示一共有 T 组数据。对于每一组数据&#xff0c;输入一行两个数 a,b (1 ≤ a,b ≤ 1000000000)。 输出格式&#xff1a; 对每组数据&#xff0c;输出一行两个数分别表示最小与最大的 c&#xff0…

R语言ICU患者死亡率预测实战

【图书推荐】《R语言医学数据分析实践》-CSDN博客 《R语言医学数据分析实践 李丹 宋立桓 蔡伟祺 清华大学出版社9787302673484》【摘要 书评 试读】- 京东图书 (jd.com) 预测ICU患者死亡率对比较药物的疗效、比较护理的有效性、比较手术的有效性有重要意义&#xff0c;利用机…