当前位置:首页 > VUE

vue插槽实现

2026-03-07 01:27:45VUE

Vue 插槽的基本概念

插槽(Slot)是 Vue 组件化开发中的重要特性,允许父组件向子组件传递模板片段,实现内容分发。插槽分为默认插槽、具名插槽和作用域插槽三种类型。

默认插槽

子组件通过 <slot> 标签定义插槽位置,父组件传递的内容会替换该标签。
子组件示例:

<template>
  <div>
    <h2>子组件标题</h2>
    <slot></slot> <!-- 默认插槽 -->
  </div>
</template>

父组件使用:

<template>
  <ChildComponent>
    <p>这是插入到子组件的内容</p>
  </ChildComponent>
</template>

具名插槽

通过 name 属性为插槽命名,实现多内容分发。
子组件示例:

vue插槽实现

<template>
  <div>
    <slot name="header"></slot>
    <slot name="body"></slot>
  </div>
</template>

父组件使用:
使用 v-slot 指令或 # 缩写指定插槽名:

<template>
  <ChildComponent>
    <template v-slot:header>
      <h3>头部内容</h3>
    </template>
    <template #body>
      <p>主体内容</p>
    </template>
  </ChildComponent>
</template>

作用域插槽

子组件通过插槽向父组件传递数据,父组件可基于数据自定义渲染逻辑。
子组件示例:

vue插槽实现

<template>
  <div>
    <slot :item="itemData"></slot>
  </div>
</template>
<script>
export default {
  data() {
    return { itemData: { text: '子组件数据' } };
  }
};
</script>

父组件使用:
通过 v-slot 接收子组件传递的数据:

<template>
  <ChildComponent>
    <template v-slot="slotProps">
      <p>{{ slotProps.item.text }}</p>
    </template>
  </ChildComponent>
</template>

动态插槽名

通过动态指令绑定插槽名,实现灵活分发。
父组件示例:

<template>
  <ChildComponent>
    <template #[dynamicSlotName]>
      <p>动态插槽内容</p>
    </template>
  </ChildComponent>
</template>
<script>
export default {
  data() {
    return { dynamicSlotName: 'customSlot' };
  }
};
</script>

插槽的默认内容

子组件可在 <slot> 内部定义默认内容,当父组件未传递内容时显示。
子组件示例:

<template>
  <slot>
    <p>默认内容(父组件未传递时显示)</p>
  </slot>
</template>

注意事项

  • 插槽内容在父组件作用域编译,无法直接访问子组件数据(作用域插槽除外)。
  • v-slot 可简写为 #,但需注意具名插槽和作用域插槽的语法差异。
  • Vue 3 中废弃了 slotslot-scope 属性,统一使用 v-slot

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

相关文章

vue router 实现

vue router 实现

Vue Router 的实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的核心实现方式。 安装 Vue Router 通过…

vue实现画图

vue实现画图

Vue 实现画图功能 在 Vue 中实现画图功能通常需要结合 HTML5 的 <canvas> 元素或第三方库。以下是几种常见的方法: 使用原生 Canvas API 通过 Vue 直接…

vue实现接口

vue实现接口

在 Vue 中实现接口请求 Vue 本身不直接提供 HTTP 请求功能,通常需要借助第三方库如 axios 或 fetch 来实现接口请求。以下是几种常见方法: 使用 axios 发送请求 安装 a…

vue实现开关

vue实现开关

Vue 实现开关组件的方法 使用原生HTML和Vue数据绑定 通过v-model绑定复选框的checked状态,结合CSS样式实现开关效果: <template> <label…

vue实现xterm

vue实现xterm

在 Vue 中集成 Xterm.js Xterm.js 是一个基于 TypeScript 的前端终端组件库,可用于在浏览器中实现终端功能。以下是在 Vue 项目中集成 Xterm.js 的详细步骤。…

vue实现上划

vue实现上划

Vue 实现上划功能 在Vue中实现上划功能,可以通过监听触摸事件(touchstart、touchmove、touchend)来判断用户的手势方向。以下是实现上划功能的几种方法: 监听触摸事件 通…