我正在尝试在AngularJS中构建单页面应用程序,并在HTML5模式下完成客户端路由。如果用户在我的网站上为页面添加书签,我理解我需要一个基本的服务器端路由方案,但我真的希望它只是总是提供我的单个主页并将相同的URL传播到客户端路由部分。 / p>
这个包罗万象的路线完美适用于只有一个深度的简单网址:
routes.MapRoute(
"Default", // Route name
"{*catchall}", // URL with parameters
new { controller = "Home", action = "Index" } // Parameter defaults
);
示例网址:
http://myapp.com/moreInfo
http://myapp.com/contactUs
“moreInfo”和“contactUs”只是Angular中的命名路由。单页应用程序的唯一真正入口点是http://myapp.com。到目前为止,这一切都非常顺利。
但是,当我尝试深入到多个路径时,应用程序会进入无限循环:
http://myapp.com/user/5
这是因为我的服务器端路由不足以将“user / 5”URL“传递”到我的客户端应用程序吗?我是否需要做一些特别的事情以确保无论URL的嵌套程度如何,它都会正确地传递给我的SPA?
答案 0 :(得分:10)
问题不在于路由配置,我有一个类似的角度js和mvc 4设置,下面的路由工作正常。
routes.MapRoute(
name: "Application",
url: "{*url}",
defaults: new { controller = "Home", action = "Index" },
namespaces: new[] { "MyApp.Web.Controllers" });
你是否在angular config方法中将html5Mode设置为true?
$locationProvider.html5Mode(true);
您可以尝试使用fiddler向您的应用发送获取请求并查看响应。如果是301或302,那么您将遇到服务器端重定向循环问题。如果它是200,则你的angular / js代码可能是问题。
答案 1 :(得分:0)
如果我理解正确,您希望将'/ user / 5'赋予Angular中的路由引擎。如果是这种情况,Angular会在哈希之后处理路由。这意味着您想要的路线是
http://myapp.com#/user/5
您还需要使用以下路由正确配置$ routeProvider:
angular.module('yourApp', []).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/user/:id', {templateUrl: 'SOME_HTML_FILE'}).
otherwise({redirectTo: '/'});
}]);
然后您需要在控制器中获取路径参数:
function someController($scope, $routeParams) {
if($routeParams.id){
alert('Super Fly!');
}
}