岁岁年,碎碎念

Vue 插槽

2023.08.04     113

插槽(Slots)是 Vue.js 中一种强大的组件通信机制,它允许你在组件的模板中预留一些位置,将父组件中的内容传递到子组件中。插槽允许你在父组件中定义子组件的一部分内容,使得子组件可以接收并渲染这些内容。

当涉及到插槽(Slots)时,Vue.js 提供了三种主要类型的插槽:默认插槽、具名插槽和作用域插槽。这些插槽类型允许你在父组件中向子组件传递内容,并在子组件内部灵活地渲染和处理这些内容。下面我将为你详细解释每种插槽类型。

1. 默认插槽(Default Slots):

默认插槽是最简单的插槽类型,它允许你将父组件中的内容传递给子组件,并在子组件内部渲染。

父组件模板:

<template>
  <child-component>
    <p>This content will be placed in the default slot.</p>
  </child-component>
</template>

子组件模板:

<template>
  <div>
    <h2>Child Component</h2>
    <slot></slot>
  </div>
</template>

在子组件的模板中,使用 <slot></slot> 标签来表示默认插槽的位置。父组件传递给子组件的内容会被插入到这个位置。

2. 具名插槽(Named Slots):

具名插槽允许你在子组件的不同位置插入不同的内容,每个具名插槽都有一个名称。

父组件模板:

<template>
  <child-component>
    <template v-slot:header>
      <h3>This is the header</h3>
    </template>
    <template v-slot:footer>
      <p>This is the footer</p>
    </template>
  </child-component>
</template>

子组件模板:

<template>
  <div>
    <h2>Child Component</h2>
    <slot name="header"></slot>
    <slot></slot>
    <slot name="footer"></slot>
  </div>
</template>

在父组件中,使用 v-slot 指令来为具名插槽命名,并在子组件中使用 <slot></slot> 标签来表示插槽的位置。

3. 作用域插槽(Scoped Slots):

作用域插槽允许子组件在插槽中访问父组件的数据,从而实现更灵活的数据传递和渲染。

父组件模板:

<template>
  <child-component>
    <template v-slot:default="slotProps">
      <p>Received Message: {{ slotProps.message }}</p>
    </template>
  </child-component>
</template>

子组件模板:

<template>
  <div>
    <h2>Child Component</h2>
    <slot :message="message"></slot>
  </div>
</template>

<script>
export default {
  props: ['message'],
};
</script>

在父组件中,使用 v-slot 指令来创建作用域插槽,并在子组件中使用 <slot> 元素来定义插槽的接口。在子组件的插槽内容中,你可以通过插槽参数(slotProps)来访问父组件传递的数据。