Может быть, попробовать использовать крючок mounted
? И вызывайте функцию unlock
как отдельную операцию после $nextTick
для хорошего разделения проблем.
mounted () {
this.loading = true;
this.$nextTick(function () {
this.unlock();
})
}
methods: {
unlock: function() {
// unlock code
this.loading = false;
}
}
ОБНОВЛЕНИЕ : попробуйте использовать функцию-обработчик, которая сначала устанавливает loading
при отправке формы, затем переводит в unlock
в качестве обратного вызова $nextTick
, например:
methods: {
handleFormSubmit: function() {
this.loading = true;
this.$nextTick(this.unlock);
},
unlock: function() {
// unlock code
this.loading = false;
}
}
ОБНОВЛЕНИЕ 2 : если ничего из вышеперечисленного не работает, это начинает звучать как ошибка в ожидаемом поведении $nextTick
, поскольку рендеринг не завершается до выполнения следующего кода. Что произойдет, если вы используете setTimeout
, чтобы принудительно разблокировать процессы до конца стека выполнения?
methods: {
handleFormSubmit: function() {
this.loading = true;
this.$nextTick(() => {
setTimeout(this.unlock, 0);
});
},
unlock: function() {
// unlock code
this.loading = false;
}
}