Vue 的插槽(Slot)是一种机制,允许你在父组件中向子组件传递内容,使得子组件的部分内容能够由父组件决定。

默认插槽(Default Slot)

默认插槽是最简单的插槽形式,用于将父组件的内容传递给子组件的特定位置。

子组件(ChildComponent.vue):

<template>
  <div>
    <slot></slot>
    <!-- 这里的内容会被替换为父组件传入的内容 -->
  </div>
</template>

父组件中使用子组件:

<template>
  <div>
    <ChildComponent>
      <!-- 这里的内容会替换子组件中的默认插槽 -->
      <p>This is some content passed from the parent.</p>
    </ChildComponent>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent,
  },
};
</script>

具名插槽(Named Slot)

具名插槽允许你在子组件中定义多个插槽,并在父组件中根据名字分发内容。

子组件(ChildComponent.vue):

<template>
  <div>
    <header>
      <slot name="header"></slot>
      <!-- 这里会接收名为 "header" 的插槽内容 -->
    </header>
    <main>
      <slot></slot>
      <!-- 这里会接收默认插槽或者没有具名插槽的内容 -->
    </main>
    <footer>
      <slot name="footer"></slot>
      <!-- 这里会接收名为 "footer" 的插槽内容 -->
    </footer>
  </div>
</template>

父组件中使用子组件:

<template>
  <div>
    <ChildComponent>
      <!-- 分发到默认插槽 -->
      <p>This is some default content passed from the parent.</p>

      <!-- 分发到名为 "header" 的插槽 -->
      <template v-slot:header>
        <h1>Header content from the parent.</h1>
      </template>

      <!-- 分发到名为 "footer" 的插槽 -->
      <template v-slot:footer>
        <footer>Footer content from the parent.</footer>
      </template>
    </ChildComponent>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent,
  },
};
</script>

通过插槽机制,Vue 提供了一种灵活的方式,让父组件能够向子组件传递内容,并且允许子组件灵活地展示这些内容。

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.