// content.vue
<template v-if="$slots.header">
<div style="backgroundColor: red">
<slot name="header">
you can see this color
</div>
</template>
// index.vue
<template v-if="false" #header>
<view>
Hello There
</view>
</template>
H5端正确渲染,插槽正确消除
微信小程序端,插槽依旧可见
v-if
小于 v-slot
优先级
6条答案
按热度按时间3htmauhk1#
复现:Vue-Playground
3okqufwl2#
uni-app/packages/uni-mp-compiler/src/transforms/vSlot.ts
Line 54 in a5e27eb
| | exportconsttransformSlot: NodeTransform=(node,context)=>{ |
这段代码执行返回一个数组,但该数组是通过
findDir
扫描是否含有slot
来判断的,但却忽略是否含有v-if
,导致产物Prop
中的u-s
传递是父文件内所有已使用slot
.uajslkp63#
目前产物:
理想产物:
klsxnrf14#
感谢反馈,目前对于这个v-if,v-slot的处理涉及到各种复杂情况,只能暂时先采用静态编译slot插槽的方案,无法在运行时动态的根据变量判断。
s5a0g9ez5#
那有什么代替方案?我认为这种包裹
v-if
的写法是很常见的 @18148764734dw1jzc5e6#
还不支持吗?都没办法透传插槽了