Vue对象有一个非常有用的成员,叫做
我想知道是否有一个类似于
现在,由于$attrs的行为,foo将不会被绑定两次,但mySlot将被发送到wrapper和b-table。那么我如何传递除了我自己定义的之外的所有插槽呢?我的一个想法是:
$attrs
。$attrs包含当前组件中未被识别为props的所有属性。一个很好的$attrs
示例在这里。我想知道是否有一个类似于
$attrs
的$scopedSlots
等效物。目前,我正在使用类似于https://dev59.com/AFUL5IYBdhLWcg3wFElR#50892881建议的方法。问题在于$scopedSlots
也传递了已定义的插槽。在这里使用该示例:
<template>
<wrapper>
<b-table :foo="foo" v-bind="$attrs" v-on="$listeners">
<template v-for="(_, slot) of $scopedSlots" v-slot:[slot]="scope"><slot :name="slot" v-bind="scope"/></template>
</b-table>
<slot name="mySlot"></slot>
</wrapper>
</template>
<script>
export default {
props: {
// let's pretend that `b-table` has a prop `foo` that is default `false`
foo: {
type: boolean,
default: true,
}
}
}
</script>
现在,由于$attrs的行为,foo将不会被绑定两次,但mySlot将被发送到wrapper和b-table。那么我如何传递除了我自己定义的之外的所有插槽呢?我的一个想法是:
computed: {
bTableSlots() {
Object.keys(this.$scopedSlots)
.filter( key => key!=='mySlot' )
.reduce( (res, key) => (res[key] = this.$scopedSlots[key], res), {} );
}
}
然后
<template v-for="(_, slot) of bTableSlots" v-slot:[slot]="scope"><slot :name="slot" v-bind="scope"/></template>
我在想是否有更好的方法来做这件事。谢谢!
$scopedSlots
是一个以name
为键的对象,如果我向其中添加一个未使用的条目,它将对性能影响很小?如果是这样,那么这是一个可以接受的解决方案。 - Max Coplan$scopedSlots
中是无关紧要的...它是相同的函数。 - Michal Levý