问题描述
父组件用了v-if,条件还没为true,子组件正常是不会渲染的
把if条件改为属性,用slot渲染子组件的时候,条件还没为true,子组件已经渲染了
复现步骤
[复现问题的步骤]
父组件
<hello :loaded="loaded" v-if="loaded">
<text class="title">{{title}}</text>
</hello>
onLoad() {
setTimeout(() => this.loaded = true, 3000)
},
删掉v-if="loaded"
,就报错了,title是故意没有定义的
子组件
<view>
<slot v-if="loaded"></slot>
<view v-else>正在加载</view>
</view>
[或者可以直接贴源代码]
https://github.com/zlab/uni-slot-bug
预期结果
[使用简洁清晰的语言描述你希望生效的预期结果]
实际结果
[这里请贴上你的报错截图或文字]
系统信息:
- h5
- uni-app 2.6.9
补充信息
[可选]
[根据你的分析,出现这个问题的原因可能在哪里?]
2条答案
按热度按时间sgtfey8w1#
参考:vuejs/vue#8578
vybvopom2#
<template v-slot:default></template>
这种写法可以延迟渲染了,能解决问题。<template #default></template>
v-slot:default简写#default还是不行