AngularJS嵌套路由

时间:2013-06-25 15:01:14

标签: angularjs angularjs-routing

我正在使用一个相当简单的AngularJS项目,它有一些深度路由嵌套,可以从嵌套数据结构中进行选择:

angular.module('doccat', []).
 config(['$routeProvider', function($routeProvider) {
     $routeProvider.
         when('/',                    { templateUrl: 'partials/detail.html', controller: DocDetailCtrl }).
         when('/:p0',                 { templateUrl: 'partials/detail.html', controller: DocDetailCtrl }).
         when('/:p0/:p1',             { templateUrl: 'partials/detail.html', controller: DocDetailCtrl }).
         when('/:p0/:p1/:p2',         { templateUrl: 'partials/detail.html', controller: DocDetailCtrl }).
         when('/:p0/:p1/:p2/:p3',     { templateUrl: 'partials/detail.html', controller: DocDetailCtrl }).
         when('/:p0/:p1/:p2/:p3/:p4', { templateUrl: 'partials/detail.html', controller: DocDetailCtrl }).
         otherwise({ redirectTo: '/' });
 }]);

function DocDetailCtrl($scope, $routeParams) {
   var path = [];
   if ($routeParams.p0) path.push($routeParams.p0);
   if ($routeParams.p1) path.push($routeParams.p1);
   if ($routeParams.p2) path.push($routeParams.p2);
   if ($routeParams.p3) path.push($routeParams.p3);
   if ($routeParams.p4) path.push($routeParams.p4);

   // do stuff with  path
}

路径中最多有5层,这对我来说应该足够了,所以现在已经足够了。但是,基础数据可以任意深度嵌套,这需要任意路由。
我认为理想的是这条路线会说'路径的其余部分都会转到任何参数数组',但看起来没有办法在AngularJS中做任何类似的事情。只是为了完整起见,有没有人知道这样做的方法?

1 个答案:

答案 0 :(得分:1)

检查doc中的$ routeProvider angularjs $routeProvider

特别是,在'当'的定义中,您可以阅读:"路径可以包含以星号(*名称)开头的命名组。当路线匹配时,所有字符都以给定的名称急切地存储在$ routeParams中。"因此,您只需要确保路由匹配,并且您将获得存储在$ routeParams中的大量参数。

我希望它有所帮助。