Angular JS $locationChangeStart nächsten url-route-Objekt
Bin ich versucht zu implementieren Autorisierung auf meine eckige Anwendung, wenn eine route geändert wird, möchte ich prüfen, ob die route ist berechtigt, für den Nutzer oder nicht. Ich habe versucht, mit $routeChangeStart
aber es hat nicht verhindert, dass die event.
Mein Aktueller code:
$scope.$on('$routeChangeStart', function(event, next, current) {
if(current_user.is_logged_in){
var route_object = next.route_object;
if(!(route_object.route_roles)){
event.preventDefault();
}
}
});
Hier in meinem next
Objekt bin ich immer route_object, die in meinem $routeProvider
var routes = object;
app.config(function($routeProvider) {
$routeProvider.when(url, {
templateUrl: "/users.html",
route_object: routes,
});
});
routes
ist ein Objekt, das gebildet wird, in meiner Funktion, aber wenn ich $locationChangeStart
ich bin immer nur der url der nächsten und vorherigen Seite,
Wie bekomme ich die gesamte route-Objekt??
InformationsquelleAutor Niraj Chauhan | 2014-10-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die parameter der route in einem
$locationChangeStart
Ereignis-listener wie diese:Dann klassische preventDefault-Methode würde die Arbeit machen. Hier ist ein plunker, den ich geschrieben habe für etwas ähnliches.
$location.$$path
zurück/users
aber in meiner route habe ich als URL/users/:id?
Wegen denen ich eine Fehlermeldung.Was ist der Fehler???
Und das funktioniert nicht. Wenn $Ort.Pfad /Benutzer/10 dann die route /user/:id kann nicht gefunden werden.
fyi, wenn Sie mit dem ui.router, müssen Sie $stateChangeStart.
InformationsquelleAutor s.alem
Verbessern Sie die Qualität dieser Antwort durch das hinzufügen einer Beschreibung, wie diese Antwort funktioniert und so, wie es verbessert die Fragesteller die situation.
InformationsquelleAutor user3683589
Was enthalten ist in weiter.$$route?
Sollte es eine nächste.$$route.route_object
$locationChangeStart
next
ist nur ein string.Verwenden Sie kein $locationChangeStart... $routeChangeStart ist, wo Sie sein wollen:
$scope.$on('$routeChangeStart', function(event, next, current) { console.log(JSON.stringify(next.$$route, null, 4)); if(current_user.is_logged_in){ var route_object = next.$$route.route_object; if(!(route_object.route_roles)){ event.preventDefault(); } } });
Yaa, das funktioniert, aber ich kann nicht verhindern, dass das Ereignis innerhalb
$routeChangeStart
Es scheint nicht ein Weg, zu negieren, den event (wie man innerhalb einer Funktion, die ausgelöst wurde von einem broadcast -) ... aber ich fand diese, die helfen könnten: link
Sorry, deine Frage war: Wie bekomme ich die gesamte route-Objekt?? Das ist alles was ich versuchte zu Antworten...
InformationsquelleAutor Gavin van Gent
Können Sie auch verwenden, $location-Anbieter tun dies, wie :
InformationsquelleAutor Peter Wilson