小探vue中的$slots和$scopedSlots

由 漆黑菌 于 2023年12月13日 发布

缘起

vue2.6.11的项目代码中试图通过$slots.slotName判断是否传递了自定义slot发现行为不合预期。

总结

在vue2.6和vue2.7中使用$scopedSlots,在vue3中使用$slots。

历史

在vue2.6之前可以向slot传递参数的scopedSlot和普通的slot是两种东西,分别放在$scopedSlots和$slots中。在vue2.6中把两种slot都在$scopedSlots中暴露,见https://github.com/vuejs/vue/releases/tag/v2.6.0-beta.1。在vue2.6.2和vue2.7(2.7.0-alpha.5回滚)早期也都尝试统一到$slots中,但是都失败了。最终在vue3中才成功)。