当前位置:首页 > VUE

vue插槽实现

2026-02-10 01:38:14VUE

Vue 插槽的基本概念

插槽(Slot)是 Vue 组件化开发中的核心功能之一,允许父组件向子组件传递模板片段,实现内容分发。插槽为组件提供了更高的灵活性和复用性。

默认插槽

默认插槽是最基础的插槽形式,子组件通过 <slot> 标签定义插槽位置,父组件传递的内容会替换子组件中的 <slot> 标签。

子组件定义:

<template>
  <div class="child-component">
    <slot></slot>
  </div>
</template>

父组件使用:

<template>
  <ChildComponent>
    <p>这段内容会替换子组件的 slot 标签</p>
  </ChildComponent>
</template>

具名插槽

具名插槽允许定义多个插槽,并通过名称区分。子组件通过 <slot name="xxx"> 指定插槽名称,父组件通过 <template v-slot:xxx> 或简写 #xxx 传递内容。

子组件定义:

vue插槽实现

<template>
  <div class="child-component">
    <slot name="header"></slot>
    <slot name="content"></slot>
    <slot name="footer"></slot>
  </div>
</template>

父组件使用:

<template>
  <ChildComponent>
    <template v-slot:header>
      <h1>这是头部内容</h1>
    </template>
    <template #content>
      <p>这是主体内容</p>
    </template>
    <template #footer>
      <p>这是底部内容</p>
    </template>
  </ChildComponent>
</template>

作用域插槽

作用域插槽允许子组件向插槽传递数据,父组件可以访问这些数据并自定义渲染逻辑。子组件通过 <slot :data="data"> 传递数据,父组件通过 v-slot="slotProps" 接收。

子组件定义:

<template>
  <div class="child-component">
    <slot :item="item" :index="index"></slot>
  </div>
</template>

<script>
export default {
  data() {
    return {
      item: { name: '示例数据' },
      index: 0
    }
  }
}
</script>

父组件使用:

vue插槽实现

<template>
  <ChildComponent>
    <template v-slot="{ item, index }">
      <p>索引: {{ index }}, 数据: {{ item.name }}</p>
    </template>
  </ChildComponent>
</template>

动态插槽名

动态插槽名允许通过变量动态指定插槽名称,适用于需要根据条件切换插槽的场景。

父组件使用:

<template>
  <ChildComponent>
    <template v-slot:[dynamicSlotName]>
      <p>动态插槽内容</p>
    </template>
  </ChildComponent>
</template>

<script>
export default {
  data() {
    return {
      dynamicSlotName: 'header'
    }
  }
}
</script>

插槽的默认内容

子组件可以在 <slot> 标签内定义默认内容,当父组件未提供插槽内容时显示。

子组件定义:

<template>
  <div class="child-component">
    <slot>
      <p>这是默认内容</p>
    </slot>
  </div>
</template>

注意事项

  • 插槽内容是在父组件作用域中编译的,因此只能访问父组件的数据和方法。
  • 作用域插槽的数据传递是单向的,父组件无法直接修改子组件传递的数据。
  • 在 Vue 3 中,v-slot 可以简写为 #,例如 #header 等同于 v-slot:header
  • 避免在插槽中使用复杂的逻辑,保持插槽的简洁性和可维护性。

标签: 插槽vue
分享给朋友:

相关文章

vue实现旋转

vue实现旋转

Vue 实现旋转效果的方法 在 Vue 中实现旋转效果可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 动画 通过 Vue 的 :class 或 :style 绑定 CSS 动画实现旋转…

vue实现图库

vue实现图库

Vue 实现图库的基本方法 使用 Vue 实现图库功能可以通过多种方式完成,以下是一些常见的方法和实现步骤。 使用 Vue 和第三方库(如 Vue Gallery) 安装 vue-gallery…

vue实现骰子

vue实现骰子

Vue 实现骰子功能 创建 Vue 组件 在 Vue 项目中创建一个骰子组件,例如 Dice.vue。该组件包含骰子的外观和逻辑。 <template> <div class=…

vue实现试卷

vue实现试卷

Vue实现试卷系统的基本思路 使用Vue.js构建试卷系统需要结合组件化开发、状态管理和后端数据交互。核心功能包括题目展示、答题逻辑、计时器和提交答案。 核心功能模块划分 试卷组件结构 试卷容…

tabbar 实现 vue

tabbar 实现 vue

在 Vue 中实现 TabBar 功能可以通过多种方式完成,以下是几种常见的方法: 使用 Vue Router 结合自定义组件 创建一个自定义的 TabBar 组件,结合 Vue Router 实…

vue实现 页面

vue实现 页面

Vue 实现页面的核心方法 创建 Vue 项目 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 是官方脚手架工具,适合传统项目;Vite 提供更快的现代构建体验。 npm cre…