AngularJS-Routen mit Parametern im Pfad werden im HTML5-Modus nicht geladen, wenn direkt zu URLs gewechselt wird
Ich habe ein paar Routen angegeben:
app.config(["$routeProvider", "$locationProvider", function($routeProvider, $locationProvider) {
$routeProvider.
when("/", {
templateUrl: "/ajax/home.html",
controller: "HomeController"
}).
when("/test/:id", {
templateUrl: "/ajax/test.html",
controller: "TestController",
resolve: {
data: function ($q, $http, $route) {
var deferred = $q.defer();
var params = $route.current.params;
$http({method: "GET", url: "/api/test/" + params.id + ".json"})
.success(function(data) {
deferred.resolve(data)
})
.error(function(data){
deferred.reject();
});
return deferred.promise;
}
}
});
$locationProvider.html5Mode(true);
}]);
Wenn es einen Link auf einer anderen Route gibt, die zu führt/test/x
, es funktioniert gut. Es funktioniert auch gut, wenn nicht im HTML5-Modus. Wenn Sie jedoch direkt zu navigieren/test/x
Im HTML5-Modus wird die Route nicht geladen und keines der aufgelösten Elemente wird ausgeführt.
Ich habe einen Großteil der AngularJS-Dokumentation durchgesehen und kann dies immer noch nicht herausfinden. PLZ :(
Bearbeiten: Ich habe mehr Tests durchgeführt, und dies gilt nur für Routen, die einen Schrägstrich enthalten. Es scheint egal zu sein, ob es einen Parameter gibt (wie:id
) drin oder nicht. Ich gehe zu/hello
(wenn diese Route definiert ist) funktioniert in allen Fällen sowohl im HTML5- als auch im Nicht-HTML5-Modus. Gehen Sie zu so etwas wie/hello/world
Funktioniert immer im Nicht-HTML5-Modus und im HTML5-Modus, wenn die Route durch Klicken auf einen Link von einer anderen Route geändert wird. Erfrischend wenn an/hello/world
Wenn Sie zur Adressleiste gehen und die Eingabetaste drücken oder auf einen Link klicken, der von einer anderen Website darauf verweist, wird die Indexseite neu geladen, jedoch nicht die tatsächliche Route.