コンポーネントがアンロードされる前に自分で作成したpostメソッドを呼び出そうとしていますが、機能しません。
@HostListenerにブレークポイントを設定しますが、別のコンポーネントを開いてもブレークしません。
Chrome=を使用してデバッグし、別のコンポーネントを開いたときにブレークするアンロードおよびアンロード前のイベントリスナーブレークポイントをオンにしました。
コードに何かが欠けていますか?
import { Component, OnInit, HostListener } from '@angular/core';
Component({
templateUrl: 'new-component.html'
})
export class NewComponent implements OnInit {
@HostListener('window:beforeunload') onBeforeUnload() {
PostCall();
}
}
window:beforeunload
は、実際にページをアンロードする直前にトリガーされるブラウザーイベントです。
別のコンポーネントに移動するとき、実際にページをアンロードしているわけではありません。
あなたがする必要があるのは、コンポーネントが破壊されているときに呼び出されるngOnDestroy
を使用することです。次のインターフェイスを実装します。
https://angular.io/api/core/OnDestroy
例:
export class NewComponent implements OnDestroy{
ngOnDestroy() {
PostCall();
}
}
このようにしてみてください:
@HostListener('window:unload', ['$event'])
unloadHandler(event) {
this.PostCall();
}
@HostListener('window:beforeunload', ['$event'])
beforeUnloadHander(event) {
return false;
}
PostCall() {
console.log('PostCall');
}
単にwindow:beforeunload
イベントをHostListenerで使用すると、リスナーはコンポーネントとともに破棄されます。
Falseを返すとアラートが発生します:)
@HostListener('window:beforeunload')
onBeforeUnload() {
return false;
}