2017-03-23 85 views
6

使用@HostListener掛鉤,但確認對話框(即詢問:是否要離開此頁面?或者您是否想要重新加載此頁面?)不顯示。onbeforeunload確認對話框不顯示何時使用angular2 @HostListener

代碼有效,但未顯示確認對話框。

在這裏我有什麼:

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

    return "something else"; 
} 

但我沒有看到這一點:

enter image description here

+0

調查candeactivate爲此我認爲 –

+0

我想這是因爲Angular綁定修改返回的值。如果您返回'true',則將其用作'preventDefault()'。我假設你的代碼返回一個字符串不會像你所期望的那樣行爲,或者像'beforeunload'所要求的那樣。只需使用'window.addEventListener(...)'代替。 –

+0

感謝@GünterZöchbauer如果我返回'false',它按預期工作。但是,正如你所說,角度綁定很可能會修改返回值。 – raneshu

回答

4

返回false不是字符串的"something else"修復問題,並顯示在確認對話框。

這很可能是角綁定修改返回值

1

您需要返回此

return $event.returnValue = "something"; 

然而,在現代瀏覽器,你設置的消息將不會顯示。該瀏覽器將只顯示自己的瀏覽器默認

0

,而不是返回false你需要返回$event.returnValue = "your text"

現代瀏覽器不會顯示你輸入的文本。

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