2016-09-16 3 views
0

Ich habe mir viele Beispiele für das Angularjs Back Button-Ereignis angesehen, aber keines der Beispiele hat sich für mich bewährt. Immer wenn die Zurück-Taste des Browsers gedrückt wird, erhält mein Code das Ereignis nicht. Ich kratze mich seit Tagen am Kopf.Angularjs History Zurück-Taste funktioniert nicht

Alles, was ich tun möchte, ist eine Warnung erhalten, die fragt, ob der Benutzer sicher ist, dass sie zurückgehen und alle ihre Daten verlieren möchten.

Unten ist der Code, den ich versucht habe. Es ist eine Kopie von anderen Beispielen, aber mit komplettem Code.

Ich habe versucht, die $ auf in den Controller mit dem $ Scope anstelle von $ rootscope hinzuzufügen, habe ich versucht, auf routechangestart zu beobachten, nichts scheint die Schaltfläche zurück zu fangen.

Hat jemand ein komplettes kleines Beispiel oder sag mir, was ich falsch mache?

var BackButtonTest = angular.module('BackButtonTest', ['ngRoute']); 

BackButtonTest.controller('backbuttonCtrl', function($scope, $location, $route) { 
}); 

BackButtonTest.run(function($rootScope, $route, $location){ 
    //Bind the $locationChangeSuccess event on the //rootScope, so that we don't need to 
    //bind in induvidual controllers. 

    $rootScope.$on('$locationChangeSuccess', function() { 
     $rootScope.actualLocation = $location.path(); 
    }); 

    $rootScope.$watch(function() { 
     return $location.path() 
    }, function (newLocation) { 
     if($rootScope.actualLocation === newLocation) { 
     // run a function or perform a reload 
     } 
    }); 
}); 

Der HTML-Code, den ich verwendet habe, ist wie folgt:

<!doctype html> 
<html lang="en" ng-app="BackButtonTest"> 
<head> 
    <meta charset="utf-8"> 
    <title>BackButtonTest App</title> 
</head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js</script> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-route.min.js"></script> 
<script src="app.js"></script> 
<body ng-controller="backbuttonCtrl as bbc"> 
    <div class="container-fluid"> 
    <div class="row"> 
     <div class="col-md-8 col-md-push-2"> 
     Some random text 
     </div> 
    </div> 
    </div> 
</body> 
</html> 
+0

Dieser Artikel helfen: http://weblogs.asp.net/dwahlin/cancelling-route-navigation-in-angularjs – Nix

Antwort

0

Ich empfehle $locationChangeStart verwenden würde, weil das ist, wo man „verhindern“, um die Änderung geschieht. im Grunde

Logik ist:

  1. Intercept die Lage Änderungsanforderung. Bestimmen Sie
  2. , wenn Sie zeigen müssen, um Ihre modal
  3. Wenn ja preventDefault auf dem Standortwechsel (dies wird die Änderung nicht passiert stoppen)
  4. speichern, wo der Benutzer Ihre modal gehen wollte
  5. anzeigen
  6. Wenn Sie klicken auf "Abbrechen" vergessen # 4
  7. Wenn sie auf OK klicken, lassen Sie # 4 passieren.

Dieser Link geht durch die Details, wie es zu tun: http://weblogs.asp.net/dwahlin/cancelling-route-navigation-in-angularjs

+0

Hallo Nix, ich habe versucht $ locationChangeStart wie du vorgeschlagen hast, aber kein Glück. Habe auch dwahlin Beispiel versucht aber immer noch kein Glück. Hat jemand ein Beispiel jsfiddle oder plnrk? –

+0

Was hat nicht funktioniert? – Nix

+0

Okay, ich habe die Entwicklerkonsole in Chrome geöffnet und möchte das Ereignis abfangen, das ausgelöst wird, wenn auf die Zurück-Schaltfläche geklickt wird. Dies funktioniert nicht. Es geht einfach auf die vorherige Seite zurück, ohne einen der $ locationChageStart, $ locationChageSuccess, $ routeChangeStart, $ watch (für die Änderung des Pfades) zu treffen. Desweiteren habe ich die erwähnten Ereignisse sowohl im Controller als auch in Run hinzugefügt. Keine der beiden Orten erfasst das Ereignis, das ausgelöst wird, wenn auf die Zurück-Schaltfläche des Browsers geklickt wird. –