【发布时间】:2019-04-25 02:58:56
【问题描述】:
我使用不同的 vuetify 组件,例如v-menu。它有一个这样的模板:
<v-menu>
<a slot="activator">menu</a>
<v-list>
<v-list-tile>Menu Entry 1</v-list-tile>
<v-list-tile>Menu Entry 2</v-list-tile>
</v-list>
</v-menu>
假设我想在它周围添加另一个包装器。那是我的特殊菜单组件,它有一些预定义的菜单选项。我希望它也有一个激活器插槽。最后一个应该以某种方式分配给原始的 v-menu 激活器插槽。有可能吗?
例子:
// index.vue:
<template>
<my-special-menu>
<button>My special menu trigger</button>
</my-special-menu>
</template>
// MySpecialMenu.vue
<template>
<v-menu>
<slot slot="activator"/> <-- I don't know how to write this line
<v-list>...</v-list>
</v-menu>
</template>
<slot slot="activator"> 是一个不正确的等式。目标是从父级(即示例中的<button>..</button>)拉取内容,并将其用作v-menu 中的slot="activator"。
我可以这样写:
<v-menu>
<a slot="activator"><slot/></a>
...
</v-menu>
但这种情况下结果模板将是:
<div class="v-menu__activator">
<a>
<button>My special menu trigger</button>
</a>
</div>
这不是我想要的。是否可以在这里摆脱 <a> 包装器?
更新:
我们可以使用像<template slot="activator"><slot name="activator"/></template> 这样的结构来给孙子扔一些槽。但是,如果我们有多个插槽并且想要全部代理它们怎么办?这就像插槽的 inheritAttrs 和 v-bind="$attrs"。目前可以吗?
例如,vuetify 中有 <v-autocomplete> 组件,它有 append、prepend、label、no-data、progress、item、selection 等槽。我围绕它写了一些包装器组件,它目前看起来像:
<template>
<v-autocomplete ..>
<template slot="append"><slot name="append"/></template>
<template slot="prepend"><slot name="prepend"/></template>
<template slot="label"><slot name="label"/></template>
...
<template slot="item" slot-scope="props"><slot name="item" v-bind="props"/></template>
</v-autocomplete>
</template>
这里可以避免所有槽枚举吗?
【问题讨论】:
-
属性
name而不是slot所以:<slot name="activator">
标签: vue.js vuejs2 vuetify.js