在 Vue 3.0 中,v-slot 被引入用于替代 Vue 2.x 中的 slot 和 slot-scope。v-slot 提供了更统一、灵活的语法,用于处理插槽内容的传递。

以下是一些使用 v-slot 的示例:

命名插槽
<template>
  <div>
    <my-component>
      <!-- 使用 v-slot 分发命名插槽 -->
      <template v-slot:header>
        <h1>Header Content</h1>
      </template>
      <template v-slot:footer>
        <p>Footer Content</p>
      </template>
    </my-component>
  </div>
</template>

在 my-component 中:
<template>
  <div>
    <slot name="header"></slot>
    <slot name="footer"></slot>
  </div>
</template>

默认插槽
<template>
  <div>
    <my-component>
      <!-- 使用 v-slot 分发默认插槽 -->
      <template v-slot>
        <p>Default Content</p>
      </template>
    </my-component>
  </div>
</template>

在 my-component 中:
<template>
  <div>
    <slot></slot>
  </div>
</template>

作用域插槽
<template>
  <div>
    <my-component>
      <!-- 使用 v-slot 分发作用域插槽 -->
      <template v-slot:default="slotProps">
        <p>{{ slotProps.text }}</p>
      </template>
    </my-component>
  </div>
</template>

在 my-component 中:
<template>
  <div>
    <slot :text="message"></slot>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Scoped Slot Content'
    };
  }
};
</script>

这些示例展示了在 Vue 3.0 中使用 v-slot 的一些常见情况。v-slot 提供了更统一的语法,让插槽的使用更加清晰和灵活。需要注意,v-slot 在某些情况下还可以简写为 #,例如 #header。


转载请注明出处:http://www.zyzy.cn/article/detail/555/Vue 3.0