我正在使用撤消删除功能,它由一个小的模式组成,允许用户在有限的时间内撤消/延迟操作(类似于gmail)。但是,如果用户决定导航到另一个窗口或关闭选项卡,我想确保执行该操作,就像这样:
brew tap heroku/brew && brew install heroku
然后,我(尝试)删除beforeDestroy上的事件侦听器:
heroku --version
但是,似乎从未调用过beforeDestroy,这意味着永远不会删除事件侦听器-因此,如果用户决定关闭选项卡或导航,则会提示他一个消息,甚至撤消组件甚至不再显示。如果用户单击“取消”,则将向商店发送另一个操作,尝试删除已删除的项目,从而导致服务器错误。
我还尝试将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');
}
放在其他位置,但是我仍然遇到同样的问题。
答案 0 :(得分:1)
要进一步阐述我的评论:onbeforeunload
事件监听器未绑定的原因是,beforeDestroy()
生命周期挂钩仅在VueJS组件被销毁时才触发。关闭浏览器选项卡/窗口时,整个线程将被擦除,这不会触发组件破坏。
由于只希望在关闭模式后才删除侦听器,因此可以使用close()
方法执行此操作:因此您的方法行之有效。