当前位置:首页 > VUE

vue插槽怎么实现的

2026-01-23 04:05:36VUE

Vue 插槽的实现方式

Vue 插槽(Slot)是一种内容分发机制,允许父组件向子组件传递模板片段。以下是插槽的主要实现方式:

默认插槽

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

vue插槽怎么实现的

<!-- 子组件 Child.vue -->
<template>
  <div>
    <slot>默认内容</slot>
  </div>
</template>

<!-- 父组件 -->
<Child>
  <p>父组件传递的内容</p>
</Child>

具名插槽

通过 name 属性为插槽命名,父组件使用 v-slot 指令指定内容分发的目标插槽。

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

<!-- 父组件 -->
<Child>
  <template v-slot:header>
    <h1>头部内容</h1>
  </template>
  <p>默认插槽内容</p>
  <template v-slot:footer>
    <p>底部内容</p>
  </template>
</Child>

作用域插槽

子组件通过插槽属性向父组件传递数据,父组件通过 v-slot 接收数据。

vue插槽怎么实现的

<!-- 子组件 -->
<template>
  <div>
    <slot :user="user"></slot>
  </div>
</template>

<script>
export default {
  data() {
    return {
      user: { name: 'Alice' }
    }
  }
}
</script>

<!-- 父组件 -->
<Child>
  <template v-slot:default="slotProps">
    <p>{{ slotProps.user.name }}</p>
  </template>
</Child>

动态插槽名

使用动态指令参数指定插槽名称。

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

插槽的实现原理

Vue 的插槽功能基于以下核心机制:

  1. 编译阶段:Vue 编译器将父组件的插槽内容编译为特殊的渲染函数。
  2. 作用域处理:子组件的插槽内容能够访问子组件的作用域,而父组件的插槽内容只能访问父组件的作用域。
  3. 虚拟 DOM 比对:在渲染过程中,Vue 会将插槽内容正确地插入到子组件的对应位置。

注意事项

  • 默认插槽的 v-slot 可以简写为 #default
  • 作用域插槽的解构赋值:v-slot="{ user }"
  • 废弃的语法:slot 属性(2.6.0+ 使用 v-slot 替代)。

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

相关文章

vue查看更多怎么实现

vue查看更多怎么实现

实现 Vue 的“查看更多”功能 数据截取与显示控制 通过 v-if 或 v-show 控制内容的显示与隐藏。初始状态下只显示部分内容,点击“查看更多”后展开完整内容。 <template&g…

vue实现展开与收起

vue实现展开与收起

Vue 实现展开与收起功能 在 Vue 中实现展开与收起功能可以通过多种方式完成,以下是一些常见的方法: 使用 v-show 或 v-if 控制显示 通过 Vue 的指令 v-show 或 v-if…

vue实现键盘

vue实现键盘

Vue 实现键盘功能 在Vue中实现键盘功能通常涉及监听键盘事件、处理输入以及渲染虚拟键盘界面。以下是几种常见的实现方式: 监听键盘事件 通过@keydown或@keyup指令监听键盘事件,适用于需…

vue实现日历

vue实现日历

Vue 实现日历的基本方法 使用 Vue 实现日历可以通过自定义组件或借助第三方库完成。以下是两种常见实现方式: 自定义日历组件 创建基于 Vue 的日历组件需要处理日期计算和渲染逻辑。核心是生成当…

vue实现tabbar

vue实现tabbar

Vue 实现 TabBar 的方法 使用 Vue Router 实现基础 TabBar 安装 Vue Router 依赖: npm install vue-router 创建路由配置文件(route…

vue实现座位

vue实现座位

Vue实现座位布局 使用Vue实现座位布局可以通过组件化和响应式数据管理来简化开发流程。以下是一个完整的实现方案: 数据准备 定义座位数据结构,通常使用二维数组表示行列关系: data() {…