Я работаю над функцией отмены удаления, она состоит из небольшого модального окна, которое позволяет пользователю отменить/отложить действие на ограниченное время (аналогично gmail). Однако я хочу убедиться, что действие будет выполнено, если пользователь решит перейти в другое окно или закрыть вкладку, что я и делаю следующим образом:
mounted() {
this.timeout = setTimeout(() => {
this.close(true);
}, this.duration);
window.addEventListener('beforeunload', this.forceDestroyHandler, { capture: true });
},
methods: {
close(deleteBeforeClosing) {
if (deleteBeforeClosing) {
clearTimeout(this.timeout);
// This is the function dispatching to the store and deleting the item
this.destructiveEvent(this.category, this.item.id);
}
this.$emit('close');
}
Затем я (пытаюсь) удалить прослушиватель событий на beforeDestroy:
beforeDestroy() {
this.forceDestroy();
window.removeEventListener('beforeunload', this.forceDestroyHandler, {capture: true});
},
Тем не менее, похоже, что beforeDestroy никогда не вызывается, а это означает, что прослушиватель событий никогда не удаляется, поэтому, если пользователь решает закрыть вкладку или перейти, ему будет предложено сообщение, даже если компонент отмены больше не отображается. Если пользователь нажмет «Отмена», в магазин будет отправлено другое действие, пытающееся удалить уже удаленный элемент, что приведет к ошибке сервера.
Я также пытался поместить removeEventListener
в другое место, но у меня все та же проблема.
forceDestroy
в beforeDestroy? - person Utsav Patel   schedule 02.04.2020forceDestroy
может быть не лучшим именем, но оно просто закрывает модальное окно и выполняет удаление:forceDestroy() { return this.timeout !== 0 ? this.close(true) : null; },
- person suuuriam   schedule 02.04.2020beforeDestroy()
для компонента никогда не вызывается, потому что вы уничтожаете не компонент, а все окно вкладки. - person Terry   schedule 02.04.2020beforeDestroy
- person Utsav Patel   schedule 02.04.2020removeEventListener
вclose()
он не удаляется должным образом? - person suuuriam   schedule 02.04.2020close()
, и он внезапно работает - понятия не имею, почему он не работал раньше. Спасибо за вашу помощь! - person suuuriam   schedule 02.04.2020