Trasy AngularJS z parametrami w ścieżce nie ładującymi się w trybie HTML5 podczas bezpośredniego przechodzenia do adresów URL
Mam kilka określonych tras:
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);
}]);
Gdy istnieje łącze na innej trasie prowadzącej do/test/x
, to działa dobrze. Działa również dobrze, gdy nie jest w trybie HTML5. Jednak po bezpośrednim przejściu do/test/x
w trybie HTML5 trasa nie ładuje się i nie jest wykonywana żadna z rozpatrywanych rzeczy.
Przejrzałem większość dokumentacji AngularJS i wciąż nie mogę tego zrozumieć. plz :(
Edytuj: Zrobiłem więcej testów, a dotyczy to tylko tras, które mają w sobie ukośnik. Nie ma znaczenia, czy istnieje parametr (np:id
) w nim lub nie. Zamierzam/hello
(jeśli ta trasa jest zdefiniowana) działa we wszystkich przypadkach zarówno w trybie HTML5, jak i innym niż HTML5. Idę do czegoś takiego/hello/world
zawsze działa w trybie innym niż HTML5 i działa w trybie HTML5, gdy trasa jest zmieniana z innej trasy, klikając łącze. Odświeżanie gdy włączone/hello/world
, przejście do paska adresu i naciśnięcie klawisza Enter lub kliknięcie linku wskazującego na niego z innej witryny powoduje ponowne załadowanie strony indeksu, ale nie rzeczywistej trasy.