如何使用@HostListener(' window:beforeunload')来调用方法?

时间:2017-10-20 11:59:57

标签: angular debugging onbeforeunload angular-components

我正在尝试调用我在卸载组件之前自己创建的post方法,但它不起作用。

我在@HostListener上放了一个断点,当我打开另一个组件时,它并没有中断。

我正在使用Chrome进行调试,并且我打开了事件侦听器断点以进行卸载和beforeunload,这在我打开其他组件时会中断。

enter image description here

我的代码中遗漏了什么?

import { Component, OnInit, HostListener } from '@angular/core';

Component({
    templateUrl: 'new-component.html'    
})

export class NewComponent implements OnInit {
    @HostListener('window:beforeunload') onBeforeUnload() {
            PostCall();
    }
}

3 个答案:

答案 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;
}