2012-09-24 72 views
1

我想在angularjs中實現路由。但我希望以與cakephp中完成的相同的方式來完成。 爲如: CakePHP中如果我通過類似路由在angularjs like cakephp

blog/manager/users/index/page:2/sort:username/direction:asc 

blog/manager/users/index/sort:username/direction:asc/page:2 

都產生相同的結果。即cakephp理解以任何順序在url中傳遞的命名參數(順序無關緊要)。 如果我需要在angularjs中執行相同的操作,該怎麼辦? 現在我有以下編碼爲angularjs我的路由選擇控制器:

angular.module('productapp', []). 
    config(['$routeProvider', function($routeProvider) { 
    $routeProvider. 
     when('/productapp', {templateUrl: 'partials/productList.html', controller: productsCtrl}). 
     when('/productapp/:productId', {templateUrl: 'partials/edit.html', controller: editCtrl}). 
     otherwise({redirectTo: '/productapp'}); 
     }], 
     ['$locationProvider', function($locationProvider) { 
      $locationProvider.html5Mode = true; 
}]); 

我是否需要硬編碼每命名參數的每個組合?或者是否有解決方案?

回答

0

你可以試試這個:

when('/blog/manager/users/index/:param1/:param2/:param2, {templaeURL: 'mytmpl', controller: MyCtrl}).

現在參數1,參數2和參數3可以接收任何東西,但如果你想與你在你的控制器以驗證參數的東西(如:MyCtrl) 。

+0

這是實現此目的的唯一方法嗎?我的意思是沒有一種方法,我可以做到這一點,而無需在控制器驗證? – z22

0

在PHP(或任何後端語言)中,由於mod_rewrite和$_GET對象,您可以靈活地使用您的URL。在JavaScript中,我們必須添加免費提供給我們的所有額外邏輯。使用

你上面的例子與博客的網址,這裏是我如何寫那些角:如果您不希望創建的參數,每個可能的組合和順序的路線

$routeProvider. 
    when('blog/manager/users/index/:page/:sort/:direction', { 
     controller: blogController 
    }). 
    when('blog/manager/users/index/:sort/:direction/:page', { 
     controller: blogController 
    }); 

,我建議找寫入resolve參數或編寫一個監視路由事件的自定義參數函數。