我正在尝试调用我在卸载组件之前自己创建的post方法,但它不起作用。
我在@HostListener上放了一个断点,当我打开另一个组件时,它并没有中断。
我正在使用Chrome进行调试,并且我打开了事件侦听器断点以进行卸载和beforeunload,这在我打开其他组件时会中断。
我的代码中遗漏了什么?
import { Component, OnInit, HostListener } from '@angular/core';
Component({
templateUrl: 'new-component.html'
})
export class NewComponent implements OnInit {
@HostListener('window:beforeunload') onBeforeUnload() {
PostCall();
}
}
答案 0 :(得分:9)
试试这样:
@HostListener('window:unload', ['$event'])
unloadHandler(event) {
this.PostCall();
}
@HostListener('window:beforeunload', ['$event'])
beforeUnloadHander(event) {
return false;
}
PostCall() {
console.log('PostCall');
}
答案 1 :(得分:5)
window:beforeunload
是一个浏览器事件,在实际卸载页面之前触发。
当您导航到另一个组件时,您实际上并未卸载该页面。
您需要做的是使用ngOnDestroy
,在销毁组件时将调用它。实现以下接口:
https://angular.io/api/core/OnDestroy
示例:
export class NewComponent implements OnDestroy{
ngOnDestroy() {
PostCall();
}
}
答案 2 :(得分:0)
仅将window:beforeunload
事件与HostListener一起使用,侦听器将被组件破坏。
返回false将发出警报:)
@HostListener('window:beforeunload')
onBeforeUnload() {
return false;
}