Vue:beforeunload事件侦听器未删除

时间:2020-04-02 13:12:08

标签: vue.js event-listener removeeventlistener

我正在使用撤消删除功能,它由一个小的模式组成,允许用户在有限的时间内撤消/延迟操作(类似于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'); } 放在其他位置,但是我仍然遇到同样的问题。

1 个答案:

答案 0 :(得分:1)

要进一步阐述我的评论:onbeforeunload事件监听器未绑定的原因是,beforeDestroy()生命周期挂钩仅在VueJS组件被销毁时才触发。关闭浏览器选项卡/窗口时,整个线程将被擦除,这不会触发组件破坏。

由于只希望在关闭模式后才删除侦听器,因此可以使用close()方法执行此操作:因此您的方法行之有效。