我有一个值不断变化的组件。但是,当它被转换隐藏时,它会停止更新值,这不是我想要的行为。
查看this fiddle或此片段:
var demo = new Vue({
el: '#demo',
data: {
visible: true,
counter: 0
},
created: function() {
setInterval(function() {
this.counter++;
}.bind(this), 200);
}
});

.fade-enter,
.fade-leave-to {
opacity: 0;
}
.fade-enter-active,
.fade-leave-active {
transition: 2s ease;
}
[v-cloak] {
display: none;
}

<script src="https://vuejs.org/js/vue.min.js"></script>
<div id="demo" v-cloak>
<p>Value: {{ counter }}</p>
<transition name="fade">
<p v-if="visible">Transition: {{ counter }}</p>
</transition>
<button @click="visible = !visible">
Transition!
</button>
</div>
&#13;
正如您所看到的,当您单击按钮时,淡出的段落会冻结当前计数器值,而另一个会继续更新。 如何避免这种情况?我希望渐变段落只有在完全隐藏时才会更新值,转换完成后。
答案 0 :(得分:3)
答案 1 :(得分:3)
补充@ Sandwell的回答和@Nope的评论,
您可以在转换完成后删除元素。
http://jsfiddle.net/jacobgoh101/5vu7wgj8/4/
<p v-show="visible" v-if="exists" @transitionend="handleTransitionend">
和
new Vue({
data: {
// ...
exists: true
},
methods: {
handleTransitionend() {
this.exists = false;
}
}
});
<强>更新强>
@HristiyanDodov通过使用transition hook @before-enter
和@after-leave
在@ Sandwell和我的建议之上构建了一个完整的解决方案。
这是完整的解决方案: http://jsfiddle.net/hdodov/5vu7wgj8/6/