onbeforeunload confirm dialog not showing when angular2 @HostListener is used

青春壹個敷衍的年華 提交于 2020-01-19 14:11:27

问题


Using @HostListener hook, but confirm dialog (that asks: Do you want to Leave this page? ...or Do you want to Reload this page?) is not showing.

The code works, but the confirm dialog is not showing.

Here what I have:

@HostListener('window:beforeunload', ['$event'])
public doSomething($event) {
    console.log("do I see this?") // <---- this logs to the console.

    return "something else";
}

But I don't see this:


回答1:


returning false instead of the string "something else" fixes the problem and the confirm dialog is shown.

It's quite possible that angular bindings modify the return value




回答2:


For anybody still looking for another way to handle this in Angular. You can try doing this:

<router-outlet (window:beforeunload)="doBeforeUnload()" (window:unload)="doUnload()"></router-outlet>

Here I added the events to an event router-outlet bucause its the only thing in my app.component.html but you can add it to a container or wrapper. Also added both events because one beforeunload will only show the alert to the user when returning false and then unload handles the actual closing event. This is important because you may want to know what to do when the user continues or actually decides to close or handling unwanted clicks. The actual functions look like this:

doBeforeUnload() {
    // Alert the user window is closing 
    return false;
}

doUnload() {
    // Clear session or do something
    this.auth.getLogout();
}

PD: I tested this in Angular 6.




回答3:


Instead of returning false you need to return $event.returnValue = "your text"

Modern browsers does not show your entered text.

@HostListener('window:beforeunload', ['$event']) 
yourfunction($event) {
    return $event.returnValue='Your changes will not be saved';
}



回答4:


You need to return this

return $event.returnValue = "something";

However, in modern browsers, the message you set will not show. The browsers will simply show their browser defaults



来源:https://stackoverflow.com/questions/42986842/onbeforeunload-confirm-dialog-not-showing-when-angular2-hostlistener-is-used

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!