vue 中插槽(slot)用法

一文详解Vue插槽slot的使用与案例展示,看完就彻底明白了 目录 一、插槽的含义 二、插槽的三种使用方法 1.默认插槽 2.具名插槽 3.作用域插槽 4.版本变化 插槽slot在实际的项目开发中是经常使用的,主要分为三大类:默认插槽、具名插槽和作用域插槽,也是比较容易上手的。 一、插槽的含义 插槽slot是写在子组件的代码中,供父组件使用的占位符。在代码中,大致写为如下的形式,后面会进行详细的写法介绍。 <slot> </slot> 插槽其实就是在写slot的地方挖个坑,等着组件的使用者,即父组... 阅读详情
AI摘要

本文详细介绍了Vue中插槽的用法,包括默认插槽、具名插槽、作用域插槽和动态插槽名等基本类型,并对比了Vue 2.6.0前后插槽语法的变化。插槽是Vue.js中实现组件内容分发和组合的重要机制,它提高了组件的复用性、可定制性和通信能力。

一、插槽用法及概念

slot又名插槽,是Vue的内容分发机制,组件内部的模板引擎使用slot元素作为承载分发内容的出口。插槽slot是子组件的一个模板标签元素,而这一个标签元素是否显示,以及怎么显示是由父组件决定的。slot又分为默认插槽,具名插槽和作用域插槽等。

二、插槽的基本类型

1. 默认插槽(Default Slot)
  • 定义:没有指定名称的插槽,用于接收父组件传递的未明确指定插槽名称的内容。
  • 用法:在子组件中使用<slot></slot>定义默认插槽的位置,父组件中直接放在子组件标签内的内容会被渲染到该位置。

举例说明:
子组件 (DefaultSlotChild.vue)

<template>
  <div class="child">
    <h2>我是子组件的标题</h2>
     <!-- 默认插槽 -->
    <slot></slot>
  </div>
</template>

父组件

<template>
  <div>
    <DefaultSlotChild>
      <!-- 这里的内容会被渲染到子组件的默认插槽中 -->
      <p>这是来自父组件的默认插槽内容。111</p>
      <p>这是来自父组件的默认插槽内容。222</p>
    </DefaultSlotChild>
  </div>
</template>

<script>
import DefaultSlotChild from './DefaultSlotChild.vue';

export default {
  components: {
    DefaultSlotChild
  }
}
</script>

父组件上最终效果

<template>
 <div> 

 <!-- 以下内容是子组件中的内容 begin-->  
  <template>
   <div class="child">  
    <h2>我是子组件的标题</h2>  
    <!-- 这里的内容会被渲染到子组件的默认插槽中 -->  
    <p>这是来自父组件的默认插槽内容。111</p>
    <p>这是来自父组件的默认插槽内容。222</p>
   </div> 
  </template> 
  <!-- 以上内容是子组件中的内容 end--> 
 
 </div>
</template>
2. 具名插槽(Named Slots)
  • 定义:带有名称的插槽,用于接收父组件中明确指定插槽名称的内容。
  • 用法:在子组件中使用<slot name="插槽名称"></slot>定义具名插槽,父组件中通过<template v-slot:插槽名称>或简写为<template #插槽名称>来指定内容应该插入哪个具名插槽。

举例说明:
子组件 (NamedSlotChild.vue)

<template>
  <div class="child">
    <header>
     <!-- 具名插槽:header -->
      <slot name="header"></slot> 
    </header>
    <main>
    <!-- 默认插槽 -->
      <slot></slot> 
    </main>
    <footer>
    <!-- 具名插槽:footer -->
      <slot name="footer"></slot> 
    </footer>
  </div>
</template>

父组件

<template>
  <NamedSlotChild>
    <template v-slot:header>
      <!-- 这里的内容会被渲染到子组件的header插槽中 -->
      <h1>这是标题</h1>
    </template>
    <p>这是默认插槽的内容。</p>
    <template v-slot:footer>
      <!-- 这里的内容会被渲染到子组件的footer插槽中 -->
      <p>这是页脚</p>
    </template>
  </NamedSlotChild>
</template>

<script>
import NamedSlotChild from './NamedSlotChild.vue';

export default {
  components: {
    NamedSlotChild
  }
}
</script>
3. 作用域插槽(Scoped Slots)
  • 定义:一种特殊的插槽,允许子组件将数据暴露给父组件的插槽内容。
  • 用法:
    在子组件中,通过
    <slot :数据名="数据值"></slot>将数据传递给插槽;
    在父组件中,通过
    <template v-slot:插槽名称="slotProps">接收数据,并使用slotProps来访问传递过来的数据。

举例说明
子组件 (ScopedSlotChild.vue)

<template>
  <ul>
    <li v-for="item in items" :key="item.id">
      <slot name="item" :item="item">
        <!-- 后备内容 -->
        {{ item.text }}
      </slot>
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { id: 1, text: '苹果' },
        { id: 2, text: '香蕉' },
        { id: 3, text: '橙子' }
      ]
    }
  }
}
</script>

父组件

<template>
  <ScopedSlotChild>
    <template v-slot:item="slotProps">
      <!-- 使用slotProps访问子组件传递的数据 -->
      <strong>{{ slotProps.item.text }}</strong>
    </template>
  </ScopedSlotChild>
</template>

<script>
import ScopedSlotChild from './ScopedSlotChild.vue';

export default {
  components: {
    ScopedSlotChild
  }
}
</script>
4. 动态插槽名(Dynamic Slot Names)
  • 定义:允许插槽的名称是动态的,根据组件的状态或其他条件来决定使用哪个插槽。
  • 用法:在父组件中,通过:slot="动态名称"来绑定插槽的名称,其中动态名称可以是一个计算属性、方法返回值或数据属性。

举例说明:

这个例子稍微复杂一些,因为它通常用于更高级的场景,比如根据条件动态渲染不同的插槽。但基本思想是使用计算属性或方法来返回插槽名。

子组件(与前面的例子类似,不需要特别修改)

父组件(简化示例)

<template>  
  <div>  
    <NamedSlotChild>  
      <!-- 使用计算属性dynamicSlotName来决定内容应该渲染到哪个插槽中 -->  
      <template v-slot:[dynamicSlotName]>  
        <p>这是根据条件动态插入到对应插槽的内容。</p>  
      </template>  
    </NamedSlotChild>  
  </div>  
</template>  
  
<script>  
import NamedSlotChild from './NamedSlotChild.vue';  
  
export default {  
  components: {  
    NamedSlotChild  
  },  
  computed: {  
    // 假设这里根据某个条件返回不同的插槽名  
    dynamicSlotName() {  
      // 示例:根据某个数据属性来决定  
      const someCondition = true; // 实际应用中这里可能是更复杂的逻辑或响应式数据  
      if (someCondition) {  
        return 'header';  
      } else {  
        return 'footer';  
      }  
    }  
  }  
}  
</script>

三、Vue 2.6.0之前与Vue 2.6.0后的比对

在Vue 2.6.0及以后的版本中,Vue团队对插槽(slot)的语法进行了简化和改进,引入了v-slot指令来替代原有的slot和slot-scope语法

1.默认插槽 缩写(由不写变成v-slot)
父组件
<child-component><p>这是默认插槽的内容</p></child-component>

子组件
<template><slot></slot></template>

缩写后变成

父组件(推荐使用<template>标签,但也可直接用于元素上)
<child-component>
<template v-slot><p>这是默认插槽的内容</p></template>
</child-component>

或(注意:直接在元素上使用v-slot较少见,且可能需要额外配置)
<child-component>
<p v-slot></p>
</child-component>


子组件不变
<template><slot></slot></template>
2.具名插槽 缩写 (由slot变成 v-slot)
父组件
<child-component>
<template slot="header"><h1>这是头部内容</h1></template>
<template slot="footer"><p>这是底部内容</p></template>
</child-component>

子组件
<template>
<slot name="header"></slot>
<slot name="footer"></slot>
</template>

缩写后变成

父组件
<child-component>
<template v-slot:header><h1>这是头部内容</h1></template>
<template v-slot:footer><p>这是底部内容</p></template>
</child-component>

或简写
<child-component>
<template #header><h1>这是头部内容</h1></template>
<template #footer><p>这是底部内容</p></template>
</child-component>

子组件不变
<template>
<slot name="header"></slot>
<slot name="footer"></slot>
</template>
3.作用域插槽 缩写 (由slot变成 v-slot)
父组件
<child-component>
<template slot="item" slot-scope="slotProps">
<p>{{ slotProps.text }}</p>
</template>
</child-component>

子组件
<template>
<slot name="item" :text="itemText"></slot>
</template>

缩写后变成

父组件
<child-component>
<template v-slot:item="slotProps">
<p>{{ slotProps.text }}</p>
</template>
</child-component>

或简写
<child-component>
<template #item="slotProps">
<p>{{ slotProps.text }}</p>
</template>
</child-component>

子组件不变
<template>
<slot name="item" :text="itemText"></slot>
</template>

结语:

插槽是Vue.js中非常重要的一个概念,它允许父组件向子组件的模板中插入内容,从而实现组件内容的分发和组合。

1.复用组件:插槽可以使组件更加灵活和可复用,使用者可以根据需要在插槽中插入不同的内容,而不需要修改组件的源代码。

2.定制化(组件可扩展性):插槽可以用来定制组件的外观和功能。通过插槽,使用者可以自定义组件中特定的部分,从而满足自己的需求。

3.组件通信:插槽也可以用于组件之间的通信。通过插槽,父组件可以向子组件传递数据或者方法,子组件可以通过插槽接收并使用这些数据或方法。

在实际开发中,根据具体的需求和场景选择合适的插槽用法,可以构建出高效、可维护的Vue.js应用。

vue系列之 插槽(Slot) 详解 插槽在vue中是一种很常见的写法,让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式。一共有三种分类:默认插槽、具名插槽、作用域插槽,下面一一根据案例改造说明。 阅读详情

相关推荐

Vue slot用法(小结)

之前看官方文档,由于自己理解的偏差,不知道slot是干嘛的,看到小标题,使用Slot分发内容,就以为 是要往下派发内容。然后就没有理解插槽的概念。其实说白了,使用slot就是先圈一块地,将来可能种花种菜,也有可能在这块地上建房子。然而slot可以以一当十,可以插入很多东西。不知明白否? 由于项目经验有限,这篇我就先跟着官网的知识点走,当然会加入自己的部分项目代码。 关于slot是这样说的, 除非子组件模板包含至少一个 <slot> 插口,否则父组件的内容将会被丢弃。当子组件模板只有一个没有属性的 slot 时,父组件整个内容片段将插入到 slot 所在的 DOM 位置,并替换掉 slot 标签

Vue -- 插槽

文章目录插槽1. 插槽2. 体验插槽的基础用法2.1 没有预留插槽组件标签内的内容会被丢弃2.2 后备内容3. 具名插槽3.1 为具名插槽提供内容3.2 具名插槽的简写形式4. 作用域插槽4.1 解构作用域插槽的 Prop把information的数据解构出来4.2 声明作用域插槽4.3 使用作用域插槽 插槽 1. 插槽 插槽(Slot)是 vue 为组件的封装者提供的能力。允许开发者在封装组件时,把不确定的、希望由用户指定的部分定义为插槽。 可以把插槽认为是组件封装期间,为用户预留的内容的占位符。 2

emmmm..... 1万+

Holtek BS45F3833芯片深度剖析:如何用高集成MCU重塑超声波雾化市场格局?

本文深度剖析Holtek BS45F3833芯片如何通过高集成MCU技术重塑超声波雾化市场。该芯片集成了PWM直驱、电容检水、触摸控制等核心功能,显著提升雾化精度和效率,同时降低BOM成本和开发难度。文章通过实测数据和实战案例,展示了其在香薰机、车载设备及工业加湿器等场景的创新应用,为开发者提供了一站式解决方案。

weixin_29192211的博客 414

Vue 中插槽(Slot)用法

通过默认插槽、具名插槽、作用域插槽、动态插槽名、插槽后备内容以及插槽的简写语法等用法,Vue.js提供了灵活且强大的组件化解决方案。如果父组件没有为某个插槽提供内容,那么子组件的模板中该插槽的位置将显示为该插槽的默认内容(如果有的话),或者简单地留空。插槽是Vue.js中非常重要的一个概念,它允许父组件向子组件的模板中插入内容,从而实现组件内容的分发和组合。在实际开发中,根据具体的需求和场景选择合适的插槽用法,可以构建出高效、可维护的Vue.js应用。子组件中的插槽如何传统给父组件用。为这些插槽插入内容。

qq_20236937的博客 1万+

手撕代码系列:Conv2D

在实际的神经网络中,每个卷积核都会对应一个偏置值。这意味着如果网络有多个卷积核,每个卷积核的输出都可以加上对应的偏置。

qq_55794606的博客 911

【华为OD机试真题E卷】474、推荐多样性 | 机试真题+思路参考+代码解析(E卷复用)(C++、Java、Py)

题目描述 >推荐多样性需要从多个列表中选择元素,一次性要返回 N 屏数据(窗口数量),每屏展示 K 个元素(窗口大小),选择策略:   各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一个元素,再从第二个列表中为每屏选择一个元素,依次类推   每个列表的元素尽量均分为 N 份,如果不够 N 个,也要全部分配完,参考样例图:

KJ.JK 4436

Vue3 中插槽(slot)的用法

Vue3 中插槽(slot)的用法 概要 Vue3(其实从2.6开始)中引入了一个新的指令v-slot,用来表示具名插槽和默认插槽 基础示例 <!-- default slot --> <foo v-slot="{ msg }"> {{ msg }} </foo> <!-- named slot --> <foo> <template v-slot:one="{msg}"> {{ msg }}

weixin_41489378的博客 4万+

把浮点数这件小事讲清楚:ABAP 7.51 里 Open SQL 与 ABAP CDS 的 FLTP 新玩法与避坑指南

ABAP浮点数计算的风险与应对 摘要:ABAP项目中的浮点数(FLTP)在跨平台计算时存在误差风险,同一逻辑在不同数据库平台可能产生细微差异。ABAP 7.51新增了两项关键能力:1)Open SQL和ABAP CDS中可为AVG函数指定结果类型,避免默认返回FLTP;2)ABAP CDS提供FLTP_TO_DEC转换函数。但需注意这些转换仍可能存在平台相关差异,且FLTP_TO_DEC会截断而非四舍五入小数位。开发者在涉及金额、数量等关键业务计算时,应明确数值语义并设计容错机制。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 216

Vue插槽slot的用法

2.6.0中,使用v-slot(以前具名插槽:slot,作用域插槽:slot-scope)。 v-slot的几种用法 用法一 插槽内容 核心:承载组件的分发内容。 // 定义,在 <navigation-link> 的模板中 <a v-bind:href="url" class="nav-link" > <slot></slot> &lt...

csdn_girl的博客 394

常用元器件使用方法3:电平转换芯片74LVC1T45的使用方法

介绍: 74LVC1T45是一个单位双向可控电平转换芯片。   芯片特性: 1、宽供给电压范围:1.65V到5.5V; 2、3.3V时,可输出24mA电流; 3、最大16uA电能损耗; 4、高噪音抑制;   型号:   引脚: VCC(A) 1 A端和DIR电源 GND 2 地 A 3 数据输入/输出 B 4 ...

snmplink的博客 1万+

Agent 智能体学习指南:从入门到求职的完整路线

AI Agent 不是更长的 prompt,而是一类系统设计——模型在受控环境里观察状态、选择动作、调用工具、接收反馈。本文系统梳理 Agent 的 5 个核心概念、7 个关键模块(Goal/State/Context/Tools/Loop/Guardrails/Eval)、三条学习路线(工程落地/研究算法/求职作品)、框架选型策略(LangGraph/OpenAI Agents SDK/Pydantic AI 等场景推荐),以及可执行的 7 天最小项目计划(从概念到简历 bullet)。

program哲学 229

Vue slot插槽用法详解

Vue slot插槽用法详解 1、第一种父组件无slot用法 <child> <!-- 1、引入的子组件中有其他内容 --> <!-- 即使子组件里面定义了slot,但是没有父组件中没有定义一个需要显示子组件中显示slot的内容,因此就什么都没有显示,因为需要定义一个插槽的出口才会显示内容 --> <!-- 2、引入的子组件中没有其他内容 --> <!-- 当引入的组件中没有定义slot入口也没有其余内容一个空标签的时候就会默认显示slo

WhaleFallljf的博客 386

大模型角色提示词写得再严密,也能被绕过?我用攻击者思维把自己吓了一跳!

很多人以为提示词是“只要写清楚了,模型就能理解”,但实际上——模型并不具备严格的规则意识,它只是在预测下一句话。所以我们必须从“攻防”角度出发,设计更强的防护机制。我这次就是亲身踩坑,用红队思维模拟攻击,才意识到原来提示词注入这么容易中招。你如果也在做 AI 应用、角色系统、提示词驱动的功能,建议你也用类似方式测试一下,不然被绕了都不知道。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1029

vue中slot插槽的用法

1.什么是插槽? slot插槽:在模板中保留位置,使用的时候可以扩展 slot取name值 在占位符中 slot=“name值” <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0">

wangming2531的博客 354

AutoSAR配置与实践(基础篇)2.5 RTE对数据一致性的管理

SWC内部不同的Runnable访问共同全局变量,Runnable类似C文件中的函数,这些函数如果被放在不同Task上运行, 可能出现出现同一时刻多个函数共同运行的情况。可以通过为受影响的任务分配相同的优先级,为受影响的任务分配相同的内部操作系统资源,或者将OS的任务配置为非抢占性来实现。数据一致性:当多个操作同时读写同一个数据,由于任务的抢占,出现了数据被篡改的情况,造成非预期的数据结果。SWC内部变量保护,限定局变量的作用域在变量的作用域在SWC的不同runnable间。

nihaoljq2010的博客 2628

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

vue3中slot插槽的用法

vue3中slot插槽的用法

佛系女程序员! 578

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【vue】vue中插槽slot的用法详解

在Vue中,子组件的模板可以定义多个插槽(包括默认插槽和具名插槽等),而父组件在引用子组件时,可以根据需要有选择性地为这些插槽插入内容。如果父组件没有为某个插槽提供内容,那么子组件的模板中该插槽的位置将显示为该插槽的默认内容(如果有的话),或者简单地留空。

景天科技苑 6万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

vue2中,slot插槽的用法

插槽: 组件的某一部分空余出来, 需要使用组件的人存放内容

m0_66051368的博客 2212

vue插槽slot的详细用法

vue中slot插槽的基本用法,slot插槽数据传输,具名插槽的使用方法等

weixin_51295863的博客 1058

【Vue】vue2.6插槽slot使用详解(更新v-slot用法总结)

vue2.6插槽slot使用详解(更新v-slot用法总结)0、 插槽简介1、匿名插槽(默认插槽default)2、具名插槽(name)2.1 对 v-slot:todo 做操作:3、作用域插槽3.2 解构插槽Prop3.3 独占默认插槽(当被提供的内容只有默认插槽时,组件的标签才可以被当作插槽的模板来使用)总结todo-list实例 在 2.6.0 中,具名插槽和作用域插槽引入了一个新的统一的语法 (即 v-slot指令)。 它取代了slot和 slot-scope这两个目前已被废弃但未被移除且仍在文档

余浩的博客 6445

VUE中插槽slot用法 及其使用场景

VUE中封装UI组件的必经之路,它叫插槽(slot)。

Oralinge 2万+

vue2.0+vue3.0一学就会全套教程【slot插槽的用法】

我们逛网站时,点击网站的导航可以呈现不同的内容区域,这个时候可能需要让组件组合使用,父组件的内容需要呈现在子组件模版时,就会用到slot,这个过程叫做内容分发(transclusion),文章详细讲解slot插槽的作用域、slot用法、作用域插槽等

鑫阳的博客 963

vue 插槽 slot 的用法

vue插槽slot的用法

熊米 4396

vue slot scope使用_20、slot插槽的用法

重点:单个插槽、具名插槽、作用域插槽的用法;访问插槽的方法。其实本小白对插槽理解的还不深,哪些场景会经常用到插槽也不了解。但是本着“大胆猜测”的理念,我的猜测如下:假设有 父组件A,有 子组件B、子组件C、子组件D;三个子组件要显示不同的内容,于是可以在三个子组件中各自写不同的内容;但是如果子组件中有重复的部分,那就会产生冗余的代码,而且修改起来也不方便;于是可是将这些重复的部分,放到他们的 父组...

weixin_39517868的博客 219

vue中slot插槽的用法(2.x的版本)

一、引入 和 HTML 元素一样,我们经常需要向一个组件传递内容,但是这个时候十分不方便,比如下面的这种情况(父组件给子组件传递一个p标签) <!DOCTYPE html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</tit

qq_45549336的博客 543
上一篇: 前端对象创建的五种模式
下一篇: Vue中Keep-Alive缓存组件使用语法及深度解析
核动力驴_
博客等级 码龄5年 54粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值