2013-10-02 58 views
5

我想在HTML5模式下完成客戶端路由的AngularJS中構建單頁面應用程序。如果用戶在我的網站上添加書籤,我明白我需要一個基本的服務器端路由方案,但我真的希望它始終提供我的單個主頁,並將相同的URL傳播到客戶端路由部分。ASP.NET MVC 4書籤的角度SPA網址路線

這包羅萬象的路線完美的作品簡單的網址只有一個深:

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」和「聯繫我們」只是命名路由。唯一真正的單頁應用程序的入口點是http://myapp.com。到目前爲止,這一切都很順利。

當我嘗試去一個以上的路由深,不過,該應用程序進入一個無限循環:

http://myapp.com/user/5 

這是因爲我的服務器端的路線是不夠的「傳遞下去」的「用戶/ 5「URL到我的客戶端應用程序?我是否需要做任何特別的事情來確保無論URL的嵌套深度如何,它都會正確傳遞給我的SPA?

回答

10

問題是不是與路由配置,我有一個類似的角度js和mvc 4設置,下面的路線工作正常。

routes.MapRoute(
    name: "Application", 
    url: "{*url}", 
    defaults: new { controller = "Home", action = "Index" }, 
    namespaces: new[] { "MyApp.Web.Controllers" }); 

您是否在角度配置方法中將html5Mode設置爲true?

$locationProvider.html5Mode(true); 

您可能嘗試使用fiddler向您的應用發送獲取請求並查看響應。如果它是一個301或302,那麼你有一個服務器端重定向循環問題。如果它是200,那麼你的angular/js代碼可能是問題。

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: '/'}); 
}]); 

然後,您將需要得到航線PARAM出控制器:

function someController($scope, $routeParams) { 
    if($routeParams.id){ 
     alert('Super Fly!'); 
    } 
}