【发布时间】:2021-03-03 07:58:15
【问题描述】:
我想收到两个命名槽 slotOne 和 slotTwo。它们位于 this.$scopedSlots.slotOne 和 this.$scopedSlots.slotTwo 的子组件中,并包含 vnode。如何将这些插槽(vnodes)包装在一个新组件中,以便我可以有条件地像这样渲染它们:
子组件:
<template>
<div>
<keep-alive>
<component :is="wrapperComponentContainingProperSlot"></component>
</keep-alive>
</div>
</template>
父组件:
<template>
<child>
<template v-slot:slotOne>
...
</template>
<template v-slot:slotTwo>
...
</template>
</child>
</template>
我猜这个问题的核心是,如何从另一个组件内部的 vnodes 创建一个组件?
【问题讨论】:
-
slotOne和slotTwo应该在子组件中呈现在哪里?您没有在模板中的任何地方使用它们。 -
可以的。但是,将
<component :is="wrapperComponentContainingProperSlot">放在父级中会有什么好处呢? -
孩子正在尝试封装用于确定要渲染哪个插槽的逻辑(在我的情况下,基于我们是否在移动设备上运行),此外,我们还想添加
keep-alive每个插槽的功能。据我了解,这需要将slotOne和slotTwo包装到它们自己的(匿名?)组件中——我只是不知道该怎么做,哈哈。
标签: javascript html vue.js vue-component