Vue.js version
1.0.18
Reproduction Link
https://jsfiddle.net/ClassicOldSong/1utjmu60/5/
操作方法:点击Start filling,然后点击Start removing,观测结果即可 remove的时间间隔比fill要小,也就是说不应该出现多余残留的元素 而且这里的remove是直接清空数组,更不应该产生残留了 然而你仍然能看到元素慢慢地变多起来
console里有输出beforeLeave和afterLeave的触发次数,可以发现afterLeave的次数小于beforeLeave
Steps to reproduce
用v-for="data in data"创建一个列表模板,设置transition属性 至少创建退出动画,进入动画无关这个问题 (为了使效果更加明显建议退出后状态不要将高度设置为0或者将透明度设置为0) 创建$vm,绑定到刚刚创建的模板
情况1
连续快速地重复向$vm.data中添加然后删除对象的动作多次
情况2
向$vm.data中添加大量对象 然后清空$vm.data 然后立即向$vm.data中添加对象 连续快速地重复以上步骤多次
正常情况下情况2的效果比情况1明显一些
What is Expected?
元素被正常地移除并不再出现在Document内
What is actually happening?
部分元素残留在页面内没有被清除且仍然能够正常地响应事件 经过测试发现afterLeave事件被触发的次数有很大的几率比beforeLeave和leave事件的触发次数小,尤其在低性能设备上比如手机会更加严重 beforeLeave事件触发次数与leave事件触发次数始终保持一致,初步判断为leave事件的回调没有被正确地执行或者在执行前就被清理掉了
请尽快修复这个BUG!!谢谢!