uni-app 在小程序端,v-if 与 v-slot:xxx 表现异常

ffdz8vbo  于 4个月前  发布在  uni-app
关注(0)|答案(6)|浏览(51)
// 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 优先级

3htmauhk

3htmauhk1#

复现:Vue-Playground

3okqufwl

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 .

uajslkp6

uajslkp63#

目前产物:

理想产物:

klsxnrf1

klsxnrf14#

感谢反馈,目前对于这个v-if,v-slot的处理涉及到各种复杂情况,只能暂时先采用静态编译slot插槽的方案,无法在运行时动态的根据变量判断。

s5a0g9ez

s5a0g9ez5#

那有什么代替方案?我认为这种包裹 v-if 的写法是很常见的 @18148764734

dw1jzc5e

dw1jzc5e6#

还不支持吗?都没办法透传插槽了

相关问题