5

Ich verwende AngularJS + die "modal" -Richtlinie, die von UI Bootstrap bereitgestellt wird. Das modale Dialogfeld funktioniert gut, aber ich habe ein Problem: Die URL ändert sich nicht.URLs mit AngularJS und modalen Dialogfeldern bereinigen

Zum Beispiel hat meine AngularJS App eine Route eingerichtet für "/ people", die eine Liste von Personen anzeigt. Wenn der Benutzer auf eine Person klickt, wird ein modales Dialogfeld angezeigt, in dem detaillierte Informationen angezeigt werden. Ich versuche herauszufinden, wie die URL geändert werden kann, ohne dass der $ routeProvider den Controller erneut ausführt.

Zum Beispiel könnte ich so etwas wie dies in meinen Routen habe:

$routeProvider. 
when('/people', {controller: PeopleCtrl, templateUrl: 'templates/people.html'}). 
when('/people/:personId', {controller: PeopleCtrl, templateUrl: 'templates/people.html'}). 

Da ist in meinem PeopleCtrl ich tun kann:

if ($routeParams.personId) { 
    $scope.editPerson({id: $routeParams.personId}); 
} 

, die im Grunde die gleiche Funktion aufruft, die ich binde mit ng-klick auf die Personenzeilen. Dies funktioniert so, dass meine App auf eine URL wie/people/123 antworten kann, aber ich kann nicht herausfinden, wie ich die URL von/people nach/people/123 und dann zurück zu/people als modal springen lassen kann Dialogfeld öffnet und schließt.

Offensichtlich kann ich einfach $ location.path ("/ people") aufrufen, aber das Problem dabei ist, dass PeopleCtrl wieder exceediert wird und ich das vermeiden möchte, da der Zustand "hinter" dem Modal beibehalten werden soll.

Mit anderen Worten: Ich suche nach einer Möglichkeit, die URL/Position zu ändern, ohne dass die normalen $ routeProvider-Änderungen erkannt werden.

Danke!

Antwort

5

another SO post gefunden, die genau tat, was ich suchte:

function MyCtrl($route, $scope) { 
    var lastRoute = $route.current; 
    $scope.$on('$locationChangeSuccess', function(event) { 
     $route.current = lastRoute; 
    }); 
} 
Verwandte Themen