2016-04-21 5 views

Antwort

30
<div (window:beforeunload)="doSomething()"></div> 

oder

@Component({ 
    selector: 'xxx', 
    host: {'window:beforeunload':'doSomething'} 
    .. 
)} 

oder

@Component({ 
    selector: 'xxx', 
    .. 
)} 
class MyComponent { 
    @HostListener('window:beforeunload') 
    doSomething() { 
    } 
} 

Dies ist, wie man globale Ereignisse zu hören. Ich weiß nicht, ob das spezielle Verhalten dieses Ereignisses unterstützt wird, wenn der Rückgabewert als Text für den Konformitätsdialog verwendet wird.

Sie können immer noch

export class AppComponent { 
    constructor() { 
    window.onbeforeunload = function(e) { 
     return 'Dialog text here.'; 
    }; 
    } 
} 

Wie hier https://developer.mozilla.org/de/docs/Web/API/WindowEventHandlers/onbeforeunload erklärt

+0

Was ist mit dem 'Fenster zuweisen. onbeforeunload' Ansatz? Wie funktioniert es nicht? –

+4

Leider funktionieren alle 3 Optionen nicht. Muss es auf der Elternkomponente sein? Auf der untergeordneten Komponente wird das Ereignis nicht ausgelöst. Beispiel: window.onbeforeunload = funktion (e) { alert ('Ereignis ausgelöst!');} –

+1

Ich habe meine Frage aktualisiert. Der Code (letzte Variante) zeigt den Dialog, wenn ich in Chrome von der Seite weg navigiere. –

30

Günter Zöchbauer verwenden Antwort auf zwei eine Zählung etwas falsch ist, das ist, was für mich gearbeitet:

@Component({ 
    selector: 'xxx', 
    .. 
)} 
class MyComponent { 
    @HostListener('window:beforeunload', ['$event']) 
    doSomething($event) { 
    if(this.hasChanges) $event.returnValue='Your data will be lost!'; 
    } 
} 

Es gibt zwei Hauptunterschiede von Günter Antwort:

  1. Das Argument @HostListener sollte window:beforeunload sein und nicht window:onbeforeunload
  2. Der Handler die Nachricht nicht zurückkehren sollte, aber es sollte in $event.returnValue statt
+0

Dieser Code funktioniert für mich. Leider wird dies nicht in meinem Android-Handy ausgeführt, wenn ich den Tab schließe. Irgendwelche Vorschläge? – brijmcq

+0

https://stackoverflow.com/questions/35779372/window-onbeforeunload-doesnt-trigger-on-android-chrome-alt-solution könnte helfen –

+0

ein Dialog zeigt, wenn der 'returnValue' etwas anderes als' null' ist. Und die meisten Broswers zeigen dem Benutzer jetzt eine generische Nachricht an. Sie können es also nicht ändern. –

Verwandte Themen