当前位置:首页 > 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 传递内容。

子组件定义:

<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>

父组件使用:

<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> 标签内定义默认内容,当父组件未提供插槽内容时显示。

子组件定义:

vue插槽实现

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

注意事项

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

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

相关文章

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed: {…

vue实现导出

vue实现导出

Vue 实现导出功能的方法 在 Vue 项目中实现导出功能通常涉及将数据导出为 Excel、CSV 或其他格式。以下是几种常见的实现方式: 使用 xlsx 库导出 Excel 安装 xlsx 库:…

vue实现通讯

vue实现通讯

Vue 组件通讯方法 父子组件通讯 父组件向子组件传递数据通过 props,子组件向父组件传递数据通过 $emit 事件。 父组件模板: <child-component :message=…

vue实现复制

vue实现复制

Vue 实现复制功能 在 Vue 中实现复制功能可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 Clipboard API Clipboard API 是现代浏览器提供的一种原生 AP…

vue实现字幕

vue实现字幕

Vue 实现字幕功能 在 Vue 中实现字幕功能可以通过动态绑定数据和 CSS 动画来实现。以下是具体实现方法: 1. 基础字幕组件 创建一个字幕组件,通过 v-model 或 props 接收字…

vue实现拉伸

vue实现拉伸

Vue 实现元素拉伸功能 在Vue中实现元素的拉伸(拖拽调整大小)功能,可以通过监听鼠标事件结合CSS样式来实现。以下是两种常见实现方式: 使用原生事件监听 创建可拉伸的组件需要处理鼠标按下…