2016-10-24 4 views
1

Ich möchte Code ausführen, bevor das Fenster geschlossen wird, aber ich möchte die Eingabeaufforderung nicht anzeigen. Hier ist mein Code:Angularjs Onbeforeunload ohne Eingabeaufforderung funktioniert nicht richtig

$window.onbeforeunload = function(){ 
     $rootScope.$broadcast('war-change'); 
     return undefined; 
    }; 

    $scope.$on('war-change',function(){ 
     console.log('here'); 
     //Execute some more code here. 
     }); 

Rückkehr nicht definiert oder falsch ist nicht so mein Code funktioniert nicht ausgeführt zu werden. jede Hilfe wird geschätzt.

Antwort

0

Ihr Code funktioniert wie vorgesehen. Überprüfen Sie die folgende Geige:

https://jsfiddle.net/8ubz4bxg/

<div ng-app> 
    <h2>Test unload</h2> 
    <div ng-controller="unloadCtrl"> 
    </div> 
</div> 

Und Controller gleiche wie Sie haben:

function unloadCtrl($scope,$window,$rootScope) { 
    $window.onbeforeunload = function(){ 
     $rootScope.$broadcast('war-change'); 
     return undefined; 
    }; 

    $scope.$on('war-change',function(){ 
     console.log('here'); 
     //Execute some more code here. 
     }); 
} 

Aber gibt es Einschränkungen auf, was Sie mit dem beforeunload Methode zu tun, einmal, weil entladen ist Sie haben nur sehr begrenzte Zeit, etwas zu tun. Um zu testen, wie viel Zeit Sie haben, können Sie die folgende Änderung verwenden:

$scope.$on('war-change',function(){ 
    console.log('here'); 
    //Execute some more code here. 
    setTimeout(function(){ console.log("ha-ha")}, 100) 
    console.log("he-he") 
    }); 

Nun, wenn Sie das Timeout auf so etwas wie 0-100 verringern, können Sie immer noch sehen „ha-ha“ int er ausgegeben. Erhöhen Sie es auf 2 Sekunden (2000) und höchstwahrscheinlich werden Sie diese Zeile nicht sehen.

Verwandte Themen