我指定了几条路线:
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 模式下也能正常工作。但是,当您直接导航到 /test/x
时在 HTML5 模式下,不会加载路由,并且不会执行解析中的任何内容。我已经浏览了很多 AngularJS 文档,但仍然无法弄清楚。请LZ:(
编辑:我做了更多的测试,这仅适用于其中有斜线的路线。其中是否有参数(如
:id
)似乎并不重要。前往 /hello
(如果定义了该路由)适用于 HTML5 和非 HTML5 模式下的所有情况。去类似 /hello/world
始终在非 HTML5 模式下工作,当通过单击链接从另一条路线更改路线时,则在 HTML5 模式下工作。开启时刷新 /hello/world
,转到地址栏并按 Enter 键或单击其他网站指向它的链接会导致它重新加载索引页面,但不会重新加载实际路线。
最佳答案
添加 <base href="/" />
到 <head>
部分是一个修复,具体取决于您遇到的问题。
(这是我的答案,所以我想确保让其他遇到这个问题的人更明显)
感谢@user27766 指出。
关于当直接转到 URL 时,AngularJS 路由路径中的参数不会以 HTML5 模式加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17472224/