【发布时间】:2021-01-15 20:54:40
【问题描述】:
我看到一些我不理解的 Vue 转换行为。举个例子会更容易解释:
给定以下组件:
<transition :name="transitionName">
<div v-if="showMe">Hey</div>
</transition>
<button @click="transitionName='slide-left'; showMe = false">Left</button>
以下是正确的:
- 为转换名称
.slide-left和.slide-right提供了 css 类,它们的含义与它们的名称相同。 -
transitionName的初始状态为slide-right -
showMe的初始状态为真
我希望 div 在单击按钮时向左滑动 。但是,它向右滑动。
此处提供完整的可重现性:
var demo = new Vue({
el: '#demo',
data: {
showMe: true,
transitionName: 'slide-right'
}
});
#demo {
display: flex;
justify-content: center;
flex-direction: column;
width: 20%;
margin: 100px auto;
text-align: center;
}
.buttons {
display: flex;
justify-content: space-between;
}
.slide-right-enter-active,
.slide-left-enter-active,
.slide-right-leave-active,
.slide-left-leave-active {
transition: all 1s ease-in-out;
}
.slide-left-enter,
.slide-left-leave-to {
transform: translateX(-100%);
}
.slide-right-enter,
.slide-right-leave-to {
transform: translateX(100%);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="demo">
<transition :name="transitionName">
<div v-if="showMe">Hey</div>
</transition>
<div class="buttons">
<button @click="transitionName='slide-left'; showMe = false">left</button>
<button @click="transitionName='slide-right'; showMe = !showMe">right</button>
</div>
</div>
它同时包含一个“左”和“右”按钮,但无论您点击哪一个,组件都会“向右”滑动。
我可以通过将按钮的回调更改为这样来修复它:
this.transitionName = 'slide-left';
Vue.nextTick(() => {
this.showMe = false;
});
但我想知道为什么这里需要nextTick,以及是否有更好的方法来解决一般问题。
【问题讨论】: