【发布时间】:2021-03-25 16:07:26
【问题描述】:
我已经使用 Vuex 和 Vuetify 的 v-bottom-sheet 构建了一个模态。基本上它的工作原理是当sendMessageModal 的状态为真时,它会在计算属性中被拾取并显示模态,反之亦然:
//Vuex mutation
toggleSendMessageModal(state) {
return state.sendMessageModal = ! state.sendMessageModal;
}
//Vuex Action
closeSendMessageModal(context) {
return new Promise((resolve, reject)=>{
context.commit('toggleSendMessageModal');
setTimeout(1000);
const error = false;
if(!error){
resolve();
} else {
reject();
}
});
}
//SendMessageModal Component
computed: {
showSendMessageModal() {
return this.$store.state.sendMessageModal;
}
},
methods: {
closeSendMessageModal(){
this.$store.dispatch('closeSendMessageModal').then(function() {
this.clearValues()
}.bind(this));
},
clearValues: function(){
this.subject = '';
this.body = '';
this.slide = 1;
},
}
我想做的是clearValues() 在模式关闭之后。我目前可以这样做的唯一方法是,如果我设置这样的超时时间:
//SendMessageModal Component
closeSendMessageModal(){
this.$store.dispatch('closeSendMessageModal').then(function() {
setTimeout(function(){ this.clearValues(); }.bind(this), 1000);
}.bind(this));
},
但我想等待模式关闭然后clearValues()。问题是如果有人想立即再次重新打开模式。
请注意,模式上有一个过渡,但我认为toggleSendMessageModal 不允许模式关闭然后清除值。
Vuetify 的 CSS 过渡 Gif。而here 是我的完整组件代码。
编辑 2
不知道是不是 vuetify 的问题。
我在closeSendMessageModal 操作上设置了超时时间:
closeSendMessageModal(context) {
return new Promise((resolve, reject)=>{
//context.commit('toggleSendMessageModal');
setTimeout(function(){ context.commit('toggleSendMessageModal'); }.bind(this), 1000);
const error = false;
if(!error){
resolve();
} else {
reject();
}
});
}
this.clearValues(); 方法在解决 closeSendMessageModal() 操作之前仍在命中。
【问题讨论】:
-
用 gif 编辑帖子
-
很抱歉我无法进行过渡,因为它使用的是 vuetify 库。还有什么我可以做的吗?
-
SetTimeout 确实有效,但我看到的问题是如果有人想立即再次重新打开模式。
-
顺便说一句,目前还不清楚你为什么要等待,我认为你的问题中没有提到过。 gif 中唯一的问题似乎是 setTimeout 延迟
标签: vue.js asynchronous vuetify.js vuex