我有以下代码:
app.config(["$routeProvider", "$locationProvider", function($routeProvider, $locationProvider) {
// use the HTML5 History API
$locationProvider.html5Mode(true);
$routeProvider.
when('/jamView', {
templateUrl: 'app/jam/jam.view.html',
controller: 'JamCtrl'
}).
otherwise({
redirectTo: '/jamView'
});
}]);
...和
$scope.jamActionSelected = function(action) {
switch(action) {
case 'Find':
$location.path('/jamView');
break;
default:
$location.path('/jamView');
}
}
当浏览器被 $ scope.jamActionSelected 重定向到视图 / jamView 时,页面加载正常,网址变为 localhost:3000 / jamView 强烈的>应该是的。但是,如果我尝试使用该网址重新加载页面,我会“找不到404”。我认为无论浏览器是通过函数重定向到视图还是通过键入URL它都应该以相同的方式工作。但是,它似乎能够从内部解析视图(由函数调用),但是如果用户想要通过键入该URL来转到该视图则不行。为什么会发生这种情况?我该如何解决?感谢。
答案 0 :(得分:1)
这与AngularJS无关,必须在服务器端完成。
事实是,当您使用HTML5历史记录API时,它只会模拟您导航到另一个网址,但事实上,您使用的是location
和{{1改变了。
当您在栏中键入URL时,浏览器会将该信息发送到服务器,后者会使用相应的内容进行响应。
例如,如果使用Node.js,您可以安装history
包,以使您的所有网址都发送相同的内容,然后AngularJS就可以使用该内容。
如果使用ASP.NET MVC,您可以创建一个connect-history-api-fallback
来映射所有请求,例如:
Route
您也可以使用其他服务器技术。要找到你的,只需谷歌,例如:
使用HTML5历史记录API与[您的服务器技术在这里]。
或者您可以查看this tutorial建议的@Claies,其中显示了几个不同的示例。