当前位置:首页 > VUE

vue插槽怎么实现的

2026-01-23 04:05:36VUE

Vue 插槽的实现方式

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

默认插槽

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

<!-- 子组件 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 接收数据。

<!-- 子组件 -->
<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 的插槽功能基于以下核心机制:

vue插槽怎么实现的

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

注意事项

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

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

相关文章

vue实现aop切面

vue实现aop切面

Vue 实现 AOP 切面编程的方法 在 Vue 中实现 AOP(面向切面编程)可以通过多种方式,以下是几种常见的实现方法: 使用 Vue 混入(Mixins) Vue 的混入机制可以用于实现横切关…

vue实现截图

vue实现截图

Vue 实现截图的方法 使用 html2canvas 库 安装 html2canvas 库: npm install html2canvas 在 Vue 组件中使用: import html2ca…

vue 实现拖动

vue 实现拖动

Vue 实现拖动的几种方法 在Vue中实现拖动功能可以通过多种方式,包括原生HTML5的拖放API、第三方库如vuedraggable等。以下是几种常见的实现方法: 使用HTML5拖放API HTM…

vue 实现后退

vue 实现后退

实现后退功能的方法 在Vue中实现后退功能通常需要结合浏览器历史记录API或Vue Router的导航方法。以下是几种常见的实现方式: 使用Vue Router的go方法 this.$router…

vue拖动实现

vue拖动实现

实现 Vue 拖动功能的方法 使用 HTML5 拖放 API 在 Vue 中可以利用 HTML5 的原生拖放 API 实现拖动功能。通过 draggable 属性标记可拖动元素,结合 @dragsta…

vue filter 实现

vue filter 实现

在 Vue.js 中,过滤器(Filter)是一种用于文本格式化的功能,可以在模板中直接使用。以下是实现过滤器的详细方法: 全局过滤器注册 通过 Vue.filter 方法注册全局过滤器,可在所有组…