我指定了几条路线:
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);
}]);
当另一条通往 的路线上有链接时/test/x
,它可以正常工作。不在 HTML5 模式下也可以正常工作。但是,当您在 HTML5 模式下直接导航到/test/x
时,不会加载路由,并且不会执行 resolve 中的任何内容。
我浏览了很多 AngularJS 文档,但仍然无法弄清楚。请:(
编辑:我做了更多的测试,这仅适用于其中有斜线的路线。是否有参数(如:id
)似乎并不重要。Going to /hello
(如果定义了该路由)适用于 HTML5 和非 HTML5 模式下的所有情况。转到类似的东西/hello/world
总是在非 HTML5 模式下工作,并且在通过单击链接从另一条路线更改路线时在 HTML5 模式下工作。打开时刷新/hello/world
,转到地址栏并按回车键或单击从另一个网站指向它的链接会导致它重新加载索引页面而不是实际路线。