Rotas AngularJS com parâmetros no caminho não carregados no modo HTML5 ao ir diretamente para URLs
Eu tenho algumas rotas especificadas:
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);
}]);
Quando há um link em outra rota que leva a/test/x
, Funciona bem. Também funciona bem quando não está no modo HTML5. No entanto, quando você navega diretamente para/test/x
no modo HTML5, a rota não é carregada e nenhuma das coisas em resolução é executada.
Examinei grande parte da documentação do AngularJS e ainda não consegui descobrir isso. plz :(
Edit: Eu fiz mais testes, e isso é apenas para rotas que têm uma barra neles. Não parece importar se há um parâmetro (como:id
) nele ou não. Indo a/hello
(se essa rota for definida) funciona para todos os casos no modo HTML5 e não HTML5. Indo para algo como/hello/world
sempre funciona no modo não HTML5 e funciona no modo HTML5 quando a rota é alterada de outra rota clicando em um link. Atualizando quando ligado/hello/world
, indo para a barra de endereços e pressionando enter ou clicando em um link apontando para ele de outro site faz com que ele recarregue a página de índice, mas não a rota real.