揭秘Vue插槽技术:打造灵活动态的组件界面

🧙‍♂️ 诸位好,吾乃诸葛妙计,编程界之翘楚,代码之大师。算法如流水,逻辑如棋局。

📜 吾之笔记,内含诸般技术之秘诀。吾欲以此笔记,传授编程之道,助汝解技术难题。

📄 吾之文章,不以繁复之言,惑汝耳目;但以浅显之语,引汝入胜

🚀 若此文对阁下有所裨益,敬请👍🏻-点赞 ⭐ - 收藏 👀 - 关注,不胜感激。

**Vue中的插槽(Slots)是一种组件模板的内容分发机制,允许我们将组件的一部分内容插入到组件的模板中的指定位置。**这种方式使得我们可以从父组件向子组件插入HTML、模板或其他组件,从而实现更灵活的组件复用和内容组织。

Vue提供了几种类型的插槽:

下面是一个使用默认插槽和具名插槽的简单案例:

首先,我们创建一个名为 BaseLayout.vue 的子组件,它包含一个默认插槽和两个具名插槽(header和footer):

复制代码
<template>
  <div class="base-layout">
    <header>
      <!-- 定义一个名为 "header" 的具名插槽 -->
      <slot name="header"></slot>
    </header>
    <main>
      <!-- 默认插槽 -->
      <slot></slot>
    </main>
    <footer>
      <!-- 定义一个名为 "footer" 的具名插槽 -->
      <slot name="footer"></slot>
    </footer>
  </div>
</template>

<script>
export default {
  name: 'BaseLayout'
}
</script>

然后,在父组件中使用 BaseLayout 组件,并提供内容给它的插槽:

复制代码
<template>
  <BaseLayout>
    <!-- 这部分内容将被放置到 BaseLayout 的默认插槽中 -->
    <template v-slot:default>
      <p>这是主要内容区域。</p>
    </template>

    <!-- 这部分内容将被放置到 BaseLayout 的名为 "header" 的插槽中 -->
    <template v-slot:header>
      <h1>这是页面标题</h1>
    </template>

    <!-- 这部分内容将被放置到 BaseLayout 的名为 "footer" 的插槽中 -->
    <template v-slot:footer>
      <p>这是页脚信息。</p>
    </template>
  </BaseLayout>
</template>

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

export default {
  name: 'App',
  components: {
    BaseLayout
  }
}
</script>

在这个案例中,BaseLayout 组件定义了三个插槽:一个默认插槽和两个具名插槽(header和footer)。父组件 App 通过 <template v-slot:slotName> 的方式向这些插槽提供了内容。当组件渲染时,这些内容将被插入到 BaseLayout 组件的相应位置。

注意:在 Vue 2.6+ 中,v-slot 指令是推荐的方式来定义插槽内容,它取代了旧的 slotslot-scope 属性。在 Vue 3 中,v-slot 可以简写为 #,例如 <template #header>

1、默认插槽(Default Slot):没有名字的插槽,用于分发任何没有被包裹在具名插槽中的内容。

2、具名插槽(Named Slots):可以通过名字来定义多个插槽,使得内容可以插入到组件的指定位置。

3、作用域插槽(Scoped Slots):允许子组件将数据作为一个临时作用域传递给插槽内容,使得父组件可以访问子组件中的数据。

👑 阁下若觉此文有益,恳请施以👍🏻-点赞 ⭐ - 收藏 👀 - 关注之礼,以资鼓励。倘若有疑问或建言,亦请在评论区💬评论 赐教,吾将感激不尽。

相关推荐
鹏多多1 分钟前
基于Vue3+TS的自定义指令开发与业务场景应用
前端·javascript·vue.js
江城开朗的豌豆9 分钟前
Redux 与 MobX:我的状态管理选择心路
前端·javascript·react.js
Cosolar15 分钟前
前端如何实现VAD说话检测?
前端
CodeSheep33 分钟前
当了leader才发现,大厂最想裁掉的,不是上班总迟到的,也不是下班搞失联的,而是经常把这3句话挂在嘴边的
前端·后端·程序员
吃饺子不吃馅37 分钟前
✨ 你知道吗?SVG 里藏了一个「任意门」——它就是 foreignObject! 🚪💫
前端·javascript·面试
IT_陈寒1 小时前
Python开发者必须掌握的12个高效数据处理技巧,用过都说香!
前端·人工智能·后端
gnip9 小时前
企业级配置式表单组件封装
前端·javascript·vue.js
一只叫煤球的猫10 小时前
写代码很6,面试秒变菜鸟?不卖课,面试官视角走心探讨
前端·后端·面试
excel10 小时前
Three.js 材质(Material)详解 —— 区别、原理、场景与示例
前端
掘金安东尼11 小时前
抛弃自定义模态框:原生Dialog的实力
前端·javascript·github