Vue,组合:将 "slot" 道具作为属性值传递

Vue, composition: pass a "slot" prop as a an attribute value

在 React 中非常简单,因为没有“插槽”。一切都是参数。但我不知道如何将插槽作为参数传递。这是我所做的。

我创建了一个新组件,它使用来自 Vuetifyv-menu 组件:

// SelectorComponent.vue
<template>
  <v-menu>
    <template v-slot:activator="{ on }">
      <slot name="activator" v-on="on" />
    </template>
    ...

然后我使用了那个组件:

<Selector>
  <template v-slot:activator="{ on }">
    <v-btn text v-on="on">Type</v-btn>
  </template>
</Selector>

并且当您按下“类型”按钮时,它不显示菜单。但是,如果我用按钮替换插槽,它会起作用:

// It works!
<template>
  <v-menu outlined :close-on-content-click="false" offset-y>
    <template v-slot:activator="{ on, attrs }">
      <v-btn text v-on="on">Type</v-btn>
    </template>

我做错了什么?

您应该通过将插槽命名为 activator 并将 on 属性绑定到 on 插槽属性来使用 scoped slots,可以在其中深入到您的自定义组件你收到 on 作为 <template v-slot:activator="{ on }"> :

/ SelectorComponent.vue
<template>
  <v-menu>
    <template v-slot:activator="{ on }">
      <slot name="activator" :on="on" />
    </template>
    ...

然后像这样使用它:

<Selector>
  <template v-slot:activator="{ on }">
    <v-btn text v-on="on">Type</v-btn>
  </template>
</Selector>