Vue2 插槽 Slot

news2025/4/8 8:47:34

提示:插槽的目的是让我买原来的设备具备更多的扩展性。

文章目录

  • 前言
  • 在组件中定义插槽(子组件视角)
    • 1. 默认插槽
    • 2. 具名插槽(带名称的插槽)
    • 3. 作用域插槽(带数据的插槽)
  • 使用插槽(父组件视角)
    • 1. 使用默认插槽
    • 2. 使用具名插槽(案例解析)
    • 3. 使用作用域插槽
  • JeecgBoot 案例深度解析
    • 原代码片段:
    • 实现机制:
  • 完整示例:带作用域的表格组件
    • 子组件定义:
    • 父组件使用:
  • 插槽与 Props 的对比
  • 最佳实践建议


前言

提示:这里可以添加本文要记录的大概内容:

插槽用于组件内容分发,实现父组件向子组件传递模板内容

插槽(Slot) 是 Vue 组件化开发中用于内容分发的机制,它允许父组件向子组件传递模板片段,实现组件内容的动态组合。通过插槽可以实现:

  1. 内容定制:父组件可自定义子组件的部分内容
  2. 结构复用:保持组件核心逻辑的同时提供布局灵活性
  3. 作用域控制:子组件可向插槽传递数据(作用域插槽)

在组件中定义插槽(子组件视角)

1. 默认插槽

<!-- 子组件 ChildComponent.vue -->
<template>
  <div class="container">
    <!-- 默认插槽位置 -->
    <slot>
      <!-- 默认内容(可选) -->
      <p>当父组件不提供内容时显示这个默认文本</p>
    </slot>
  </div>
</template>

2. 具名插槽(带名称的插槽)

<!-- 子组件 JSelectBizComponent.vue -->
<template>
  <a-col class="left">
    <!-- 具名插槽 -->
    <slot name="left">
      <!-- 默认内容 -->
      <a-select .../>
    </slot>
  </a-col>
</template>

3. 作用域插槽(带数据的插槽)

<!-- 子组件 ScopedComponent.vue -->
<template>
  <div>
    <slot name="item" 
          :itemData="internalData" 
          :index="currentIndex">
    </slot>
  </div>
</template>

使用插槽(父组件视角)

1. 使用默认插槽

<!-- 父组件 ParentComponent.vue -->
<child-component>
  <!-- 插入默认插槽的内容 -->
  <h2>自定义标题</h2>
  <p>自定义内容</p>
</child-component>

2. 使用具名插槽(案例解析)

<!-- 父组件使用 JSelectBizComponent -->
<j-select-biz-component>
  <!-- #left 对应子组件的 name="left" 插槽 -->
  <template #left>
    <!-- 覆盖默认的 a-select -->
    <a-input placeholder="自定义输入框" />
    <a-button type="primary">搜索</a-button>
  </template>
</j-select-biz-component>

3. 使用作用域插槽

<!-- 父组件使用 ScopedComponent -->
<scoped-component>
  <template #item="slotProps">
    <!-- 使用子组件传递的数据 -->
    <p>索引:{{ slotProps.index }}</p>
    <p>数据:{{ slotProps.itemData }}</p>
  </template>
</scoped-component>

JeecgBoot 案例深度解析

原代码片段:

<!-- JSelectBizComponent 组件 -->
<template>
  <a-col class="left">
    <slot name="left">
      <a-select ...></a-select>
    </slot>
  </a-col>
</template>

实现机制:

  1. 插槽定义:通过 <slot name="left"> 定义具名插槽
  2. 默认内容:当父组件不提供插槽内容时,显示 <a-select> 组件
  3. 插槽覆盖:父组件可以通过 #left 完全替换默认内容
  4. 样式控制:通过 CSS 类 .left 控制布局样式

完整示例:带作用域的表格组件

子组件定义:

<!-- SmartTable.vue -->
<template>
  <a-table :dataSource="data">
    <template v-for="col in columns" :slot="col.slotName">
      <slot :name="col.slotName" 
            :column="col" 
            :record="col.record" 
            :text="col.text">
      </slot>
    </template>
  </a-table>
</template>

父组件使用:

<smart-table :columns="columns">
  <template #action="scope">
    <a-button @click="handleEdit(scope.record)">编辑</a-button>
    <a-button @click="handleDelete(scope.record.id)">删除</a-button>
  </template>
  
  <template #status="scope">
    <a-tag :color="scope.text | statusColor">
      {{ scope.text | statusText }}
    </a-tag>
  </template>
</smart-table>

插槽与 Props 的对比

特性插槽(Slot)Props
内容类型模板片段(HTML/组件)数据(字符串/数字/对象等)
使用场景结构定制数据传递
作用域可使用子组件数据(作用域插槽)父组件单向传递
动态性中等

最佳实践建议

  1. 合理命名:使用语义化的插槽名称(如 #header#footer
  2. 默认内容:为常用插槽提供合理的默认实现
  3. 作用域控制:当需要子组件数据时使用作用域插槽
  4. 适度使用:避免过度使用插槽导致组件结构复杂化
  5. 样式隔离:通过 CSS Scoped 或 BEM 规范管理插槽样式

通过以上方式,可以充分利用 Vue 的插槽机制,构建出高复用性、灵活可定制的组件体系,这在类似 JeecgBoot 这类需要高度可配置性的后台管理系统中尤为重要。

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

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

相关文章

【嵌入式学习3】UDP发送端、接收端

目录 1、发送端 2、接收端 3、UDP广播 1、发送端 from socket import *udp_socket socket(AF_INET,SOCK_DGRAM) udp_socket.bind(("127.0.0.1",3333))data_str "UDP发送端数据" data_bytes data_str.encode("utf-8") udp_socket.sendto(d…

Linux 系统 SVN 源码安装与配置全流程指南

Linux系统SVN源码安装与配置全流程指南 一、环境准备 系统要求 CentOS 7及以上版本需安装GCC编译工具链 依赖项 APR/APR-UTIL&#xff08;Apache可移植运行库&#xff09;SQLite&#xff08;嵌入式数据库&#xff09;zlib&#xff08;数据压缩库&#xff09; 二、下载及安装…

Redis 的五种数据类型面试回答

这里简单介绍一下面试回答、我之前有详细的去学习、但是一直都觉得太多内容了、太深入了 然后面试的时候不知道从哪里讲起、于是我写了这篇CSDN帮助大家面试回答、具体的深入解析下次再说 面试官你好 我来介绍一下Redis的五种基本数据类型 有String List Set ZSet Map 五种基…

关于类模板STL中vector容器的运用和智能指针的实现

代码题&#xff1a;使用vector实现一个简单的本地注册登录系统 注册&#xff1a;将账号密码存入vector里面&#xff0c;注意防重复判断 登录&#xff1a;判断登录的账号密码是否正确 #include <iostream> #include <cstring> #include <cstdlib> #in…

Opencv计算机视觉编程攻略-第十一节 三维重建

此处重点讨论在特定条件下&#xff0c;重建场景的三维结构和相机的三维姿态的一些应用实现。下面是完整投影公式最通用的表示方式。 在上述公式中&#xff0c;可以了解到&#xff0c;真实物体转为平面之后&#xff0c;s系数丢失了&#xff0c;因而无法会的三维坐标&#xff0c;…

git修改已经push的commit的message

1.修改信息 2.修改message 3.强推

2026考研数学张宇武忠祥复习视频课,高数基础班+讲义PDF

2026考研数学武忠祥老师课&#xff08;网盘&#xff09;&#xff1a;点击下方链接 2026考研数学武忠祥网课&#xff08;最新网盘&#xff09; 一、基础阶段&#xff08;3-5个月&#xff09; 目标&#xff1a;搭建知识框架掌握基础题型 教材使用&#xff1a; 高数&#xff1a;…

C++使用Qt Charts可视化大规模点集

引言 数据可视化是数据分析和决策过程中的重要环节。随着数据量的不断增长&#xff0c;如何高效地可视化大规模数据集成为了一个挑战。Qt Charts 提供了一个强大的工具集&#xff0c;用于创建直观的数据可视化图表。本文将探讨如何使用 C 和 Qt Charts 可视化大规模点集&#…

质检LIMS系统在生态修复企业的实践 生态修复行业的质量管控难题

一、生态修复行业的质量管控新命题 在生态文明建设的大背景下&#xff0c;生态修复企业面临着复杂的环境治理挑战。土壤改良、水体净化、植被恢复等工程&#xff0c;均需以精准的实验数据支撑决策。传统实验室管理模式存在数据孤岛、流程非标、合规风险高等痛点&#xff0c;而…

Spring Cloud之服务入口Gateway之Route Predicate Factories

目录 Route Predicate Factories Predicate 实现Predicate接口 测试运行 Predicate的其它实现方法 匿名内部类 lambda表达式 Predicate的其它方法 源码详解 代码示例 Route Predicate Factories The After Route Predicate Factory The Before Route Predicate Fac…

《AI大模型应知应会100篇》第6篇:预训练与微调:大模型的两阶段学习方式

第6篇&#xff1a;预训练与微调&#xff1a;大模型的两阶段学习方式 摘要 近年来&#xff0c;深度学习领域的一个重要范式转变是“预训练-微调”&#xff08;Pretrain-Finetune&#xff09;的学习方式。这种两阶段方法不仅显著提升了模型性能&#xff0c;还降低了特定任务对大…

java后端对时间进行格式处理

时间格式处理 通过java后端&#xff0c;使用jackson库的注解JsonFormat(pattern "yyyy-MM-dd HH:mm:ss")进行格式化 package com.weiyu.pojo;import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import …

汽车BMS技术分享及其HIL测试方案

一、BMS技术简介 在全球碳中和目标的战略驱动下&#xff0c;新能源汽车产业正以指数级速度重塑交通出行格局。动力电池作为电动汽车的"心脏"&#xff0c;其性能与安全性不仅直接决定了车辆的续航里程、使用寿命等关键指标&#xff0c;更深刻影响着消费者对电动汽车的…

【TI MSPM0】CMSIS-DSP库学习

一、什么是CMSIS-DSP库 基于Cortex微控制器软件接口标准的数字信号处理的函数库 二、页面概览 这个用户手册用来描述CMSIS-DSP软件的函数库&#xff0c;有通用的计算处理函数给Cortex-M和Cortex-A的处理器使用 三、工程学习 1.导入工程 2.样例介绍 在Q15的格式下&#xff0c…

Vue3:初识Vue,Vite服务器别名及其代理配置

一、创建一个Vue3项目 创建Vue3项目默认使用Vite作为现代的构建工具&#xff0c;以下指令本质也是通过下载create-vue来构建项目。 基于NodeJs版本大于等于18.3&#xff0c;使用命令行进行操作。 1、命令执行 npm create vuelatest输入项目名称 2、选择附加功能 选择要包含的功…

Go语言类型捕获及内存大小判断

代码如下&#xff1a; 类型捕获可使用&#xff1a;reflect.TypeOf()&#xff0c;fmt.Printf在的%T。 内存大小判断&#xff1a;len()&#xff0c;unsafe.Sizeof。 package mainimport ("fmt""unsafe""reflect" )func main(){var i , j 1, 2f…

学透Spring Boot — 017. 处理静态文件

这是我的《学透Spring Boot》专栏的第17篇文章&#xff0c;了解更多内容请移步我的专栏&#xff1a; Postnull CSDN 学透 Spring Boot 目录 静态文件 静态文件的默认位置 通过配置文件配置路径 通过代码配置路径 静态文件的自动配置 总结 静态文件 以前的传统MVC的项目…

CMake实战指南一:add_custom_command

CMake 进阶&#xff1a;add_custom_command 用法详解与实战指南 在 CMake 构建系统中&#xff0c;add_custom_command 是一个灵活且强大的工具&#xff0c;允许开发者在构建流程中插入自定义操作。无论是生成中间文件、执行预处理脚本&#xff0c;还是在目标构建前后触发额外逻…

懂x帝二手车数据爬虫-涉及简单的字体加密,爬虫中遇到“口”问题的解决

#脚本如下 import requests import pprint import timeurl https://www.dongchedi.com/motor/pc/sh/sh_sku_list?aid1839&app_nameauto_web_pc headers {User-Agent: Mozilla/5.0 }font_map {58425: 0, 58700: 1, 58467: 2, 58525: 3,58397: 4, 58385: 5, 58676: 6, 58…

4.7学习总结 java集合进阶

集合进阶 泛型 //没有泛型的时候&#xff0c;集合如何存储数据 //结论: //如果我们没有给集合指定类型&#xff0c;默认认为所有的数据类型都是object类型 //此时可以往集合添加任意的数据类型。 //带来一个坏处:我们在获取数据的时候&#xff0c;无法使用他的特有行为。 //此…