Vue 3 具名插槽传值详解

news2024/12/28 8:56:04

Vue 3 具名插槽传值详解

Vue 3 的具名插槽不仅支持内容插入,还支持通过作用域插槽传递值(又称插槽作用域)。这使得父组件能够动态接收来自子组件的数据,从而实现更加灵活的组件开发。

在本文中,我们将深入讲解 Vue 3 中具名插槽传值的概念、使用方法,以及其在实际场景中的应用。


1. 什么是插槽作用域?

插槽作用域是 Vue 的一种特性,它允许子组件通过插槽向父组件传递数据。父组件可以动态使用这些数据自定义插槽内容。

作用域插槽的基本使用形式如下:

<template>
  <child-component>
    <template v-slot:name="slotProps">
      <!-- 使用 slotProps 提供的值 -->
    </template>
  </child-component>
</template>

2. 插槽传值的基本使用

2.1 子组件定义传递数据的插槽

在子组件中,通过 <slot> 标签的 v-bind 传递数据。例如:

<template>
  <div>
    <slot :message="message"></slot>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: "Hello from Child Component"
    };
  }
};
</script>

这里,子组件通过 v-bind 向插槽传递了 message 数据。

2.2 父组件接收数据并使用

父组件通过 v-slot 指令接收子组件传递的值:

<template>
  <child-component>
    <template v-slot:default="{ message }">
      <p>{{ message }}</p>
    </template>
  </child-component>
</template>

输出结果为:

Hello from Child Component

3. 多插槽传值

具名插槽支持传递独立的数据,为每个插槽提供灵活的内容自定义能力。

3.1 子组件定义多个插槽

<template>
  <div>
    <slot name="header" :title="title"></slot>
    <slot name="content" :body="body"></slot>
  </div>
</template>

<script>
export default {
  data() {
    return {
      title: "标题",
      body: "这是内容部分"
    };
  }
};
</script>

3.2 父组件分别接收数据

父组件可以通过不同的插槽接收和使用子组件传递的数据:

<template>
  <child-component>
    <template v-slot:header="{ title }">
      <h1>{{ title }}</h1>
    </template>
    <template v-slot:content="{ body }">
      <p>{{ body }}</p>
    </template>
  </child-component>
</template>

结果:

  • 标题部分将渲染为 <h1>标题</h1>
  • 内容部分将渲染为 <p>这是内容部分</p>

4. 动态列表和插槽传值结合

插槽传值在动态列表中非常实用。以下是一个动态渲染列表项的示例:

4.1 子组件定义带数据的插槽

<template>
  <ul>
    <li v-for="(item, index) in items" :key="index">
      <slot name="item" :item="item"></slot>
    </li>
  </ul>
</template>

<script>
export default {
  props: {
    items: {
      type: Array,
      required: true
    }
  }
};
</script>

4.2 父组件自定义列表渲染

父组件通过插槽自定义每个列表项的渲染内容:

<template>
  <list-component :items="['苹果', '香蕉', '橙子']">
    <template v-slot:item="{ item }">
      <li>{{ item }} - 自定义内容</li>
    </template>
  </list-component>
</template>

渲染结果为:

苹果 - 自定义内容
香蕉 - 自定义内容
橙子 - 自定义内容

5. 实际应用场景

5.1 表格组件

具名插槽传值可用于创建灵活的表格组件:

<template>
  <table>
    <thead>
      <tr>
        <slot name="header" />
      </tr>
    </thead>
    <tbody>
      <tr v-for="row in rows" :key="row.id">
        <slot name="row" :row="row" />
      </tr>
    </tbody>
  </table>
</template>

<script>
export default {
  props: {
    rows: {
      type: Array,
      required: true
    }
  }
};
</script>

父组件自定义表格内容:

<template>
  <table-component :rows="data">
    <template v-slot:header>
      <th>名称</th>
      <th>年龄</th>
    </template>
    <template v-slot:row="{ row }">
      <td>{{ row.name }}</td>
      <td>{{ row.age }}</td>
    </template>
  </table-component>
</template>

<script>
export default {
  data() {
    return {
      data: [
        { id: 1, name: "张三", age: 25 },
        { id: 2, name: "李四", age: 30 }
      ]
    };
  }
};
</script>

渲染结果:

名称年龄
张三25
李四30

6. 注意事项

  1. 确保插槽名称唯一:使用具名插槽时,插槽名称应该具有描述性且唯一,避免混淆。
  2. 数据类型校验:通过插槽传递的数据建议使用 props 进行校验,确保数据可靠性。
  3. 适度使用作用域插槽:作用域插槽虽然强大,但滥用可能导致组件逻辑复杂化。

7. 总结

Vue 3 的具名插槽传值功能为组件的灵活性提供了强有力的支持,尤其在动态内容渲染、复杂 UI 组件开发中,作用非常突出。通过掌握其使用方法,你可以轻松构建高扩展性、高复用性的组件。

希望本文能够帮助你更好地理解和应用具名插槽传值。如果觉得有用,请点赞、收藏支持!

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

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

相关文章

UGUI简单动画制作

一、最终效果 UI简单动画制作 二、制作过程 1、打开动画制作窗口 2、新建一个动画 3、给一个对象制作动画 4、创建动画控制器进行不同动画变换控制 5、书写脚本&#xff0c;通过按钮来进行不同动画切换 using System.Collections; using System.Collections.Generic; using U…

[SAP ABAP] 程序备份

备份当前程序到本地的方式如下&#xff1a; 1.复制粘贴 Ctrl A 、Ctrl V 2.【实用程序】|【更多实用程序】|【上载/下载】|【下载】 ​ 3.快捷键&#xff0c;支持多种格式导出(.abap .html .pdf 等) 在事务码SE38(ABAP编辑器)屏幕右下角&#xff0c;点击【Options选项】图…

代码随想录Day51 99. 岛屿数量,99. 岛屿数量,100. 岛屿的最大面积。

1.岛屿数量深搜 卡码网题目链接&#xff08;ACM模式&#xff09;(opens new window) 题目描述&#xff1a; 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接…

【漏洞复现】CVE-2022-41678 Arbitrary JMX Service Invocation with Web Interface

漏洞信息 NVD - cve-2022-41678 Apache ActiveMQ prior to 5.16.5, 5.17.3, there is a authenticated RCE exists in the Jolokia /api/jolokia. 组件影响版本安全版本Apache:ActiveMQ< 5.16.6> 5.16.6Apache:ActiveMQ5.17.0 - 5.17.4> 5.17.4&#xff0c;> 6.…

Bash 脚本教程

注&#xff1a;本文为 “Bash 脚本编写” 相关文章合辑。 BASH 脚本编写教程 as good as well于 2017-08-04 22:04:28 发布 这里有个老 American 写的 BASH 脚本编写教程&#xff0c;非常不错&#xff0c;至少没接触过 BASH 的也能看懂&#xff01; 建立一个脚本 Linux 中有…

操作系统(26)数据一致性控制

前言 操作系统数据一致性控制是确保在计算机系统中&#xff0c;数据在不同的操作和处理过程中始终保持正确和完整的一种机制。 一、数据一致性的重要性 在当今数字化的时代&#xff0c;操作系统作为计算机系统的核心&#xff0c;负责管理和协调各种资源&#xff0c;以确保计算机…

48页PPT|2024智慧仓储解决方案解读

本文概述了智慧物流仓储建设方案的行业洞察、业务蓝图及建设方案。首先&#xff0c;从政策层面分析了2012年至2020年间国家发布的促进仓储业、物流业转型升级的政策&#xff0c;这些政策强调了自动化、标准化、信息化水平的提升&#xff0c;以及智能化立体仓库的建设&#xff0…

Windows和Linux安全配置和加固

一.A模块基础设施设置/安全加固 A-1.登录加固 1.密码策略 a.最小密码长度不少于8个字符&#xff0c;将密码长度最小值的属性配置界面截图。 练习用的WindowsServer2008,系统左下角开始 > 管理工具 > 本地安全策略 > 账户策略 > 密码策略 > 密码最小长度&#…

EleutherAI/pythia-70m

EleutherAI/pythia-70m” 是由 EleutherAI 开发的一个小型开源语言模型&#xff0c;它是 Pythia Scaling Suite 系列中参数量最小的模型&#xff0c;拥有大约 7000 万个参数。这个模型主要旨在促进对语言模型可解释性的研究&#xff1b; Pythia Scaling Suite是为促进可解释性…

Linux系统编程——详解页表

目录 一、前言 二、深入理解页表 三、页表的实际组成 四、总结&#xff1a; 一、前言 页表是我们之前在讲到程序地址空间的时候说到的&#xff0c;它是物理内存到进程程序地址空间的一个桥梁&#xff0c;通过它物理内存的数据和代码才能映射到进程的程序地址空间中&#xff…

GTM023 W.H.Greub线性代数经典教材:Linear Algebra

这本教材是我高中时期入门线性代数的主要教材&#xff0c;我的很多基础知识都来源于这本书&#xff0c;如今看回这本书可以说满满的回忆。这本书可以说&#xff0c;是我读过的内容最为全面且完备的线性代数教材了。而且它的语言风格非常的代数化&#xff0c;没有什么直观可言&a…

多视图 (Multi-view) 与多模态 (Multi-modal)

多视图 (Multi-view) 与多模态 (Multi-modal) 是两种不同的数据处理方式&#xff0c;它们在机器学习和数据分析中有着重要的应用。尽管这两者有一些相似之处&#xff0c;但它们关注的角度和处理方法有所不同。 多视图 (Multi-view) 定义&#xff1a;多视图指的是同一数据对象…

layui动态拼接生成下拉框验证必填项失效问题

利用 jQuery 动态拼接下拉框时&#xff0c;lay-verify"required" 失效了&#xff0c;有以下几种原因。 1. <form></form>标签 加入 layui 类&#xff0c;class"layui-form" 。提交按钮上加自动提交&#xff0c;lay-submit ""; 。需…

机器学习基础算法 (二)-逻辑回归

python 环境的配置参考 从零开始&#xff1a;Python 环境搭建与工具配置 逻辑回归是一种用于解决二分类问题的机器学习算法&#xff0c;它可以预测输入数据属于某个类别的概率。本文将详细介绍逻辑回归的原理、Python 实现、模型评估和调优&#xff0c;并结合垃圾邮件分类案例进…

『大模型笔记』评估大型语言模型的指标:ELO评分,BLEU,困惑度和交叉熵介绍以及举例解释

评估大型语言模型的指标:ELO评分,BLEU,困惑度和交叉熵介绍以及举例解释 文章目录 一. ELO Rating大模型的elo得分如何理解1. Elo评分的基本原理2. 示例说明3. 大模型中的Elo得分总结3个模型之间如何比较计算,给出示例进行解释1. 基本原理扩展到三方2. 示例计算第一场: A A…

使用VS Code开发ThinkPHP项目

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《ThinkPHP 8高效构建Web应用 夏磊 编程与应用开发丛书 清华大学出版社》【摘要 书评 试读】- 京东图书 ThinkPHP 8开发环境安装-CSDN博客 安装ThinkPHP项目的IDE 常用的集成开发环境&#xff08;IDE&#xff09;包括P…

ROS1入门教程6:复杂行为处理

一、新建项目 # 创建工作空间 mkdir -p demo6/src && cd demo6# 创建功能包 catkin_create_pkg demo roscpp rosmsg actionlib_msgs message_generation tf二、创建行为 # 创建行为文件夹 mkdir action && cd action# 创建行为文件 vim Move.action# 定义行为…

Java处理视频思路

1.首先实现断点续传功能。 断点续传实现思路&#xff1a; 前端对文件分块。前端使用多线程一块一块上传&#xff0c;上传前给服务端发一个消息校验该分块是否上传&#xff0c;如果已上传则不再上传。如果从该断点处断网了&#xff0c;下次上传时&#xff0c;前面的分块已经存在…

C#实现调用DLL 套壳读卡程序(桌面程序开发)

背景 正常业务已经支持 读三代卡了&#xff0c;前端调用医保封装好的服务就可以了&#xff0c;但是长护要读卡&#xff0c;就需要去访问万达&#xff0c;他们又搞了一套读卡的动态库&#xff0c;为了能够掉万达的接口&#xff0c;就需要去想办法调用它们提供的动态库方法&…

USB 状态机及状态转换

文章目录 USB 状态机及状态转换连接状态供电状态默认状态地址状态配置状态挂起状态USB 状态机及状态转换 枚举完成之前,USB 设备要经过一系列的状态变化,才能最终完成枚举。这些状态是 连接状态 - attached供电状态 - powered默认状态 - default地址状态 - address配置状态 -…