angularjs的动态路线

时间:2014-04-25 00:15:27

标签: angularjs angularjs-routing

我希望有一条看起来像这样的路线:

 $routeProvider.when('/trial/:extention/:id', {templateUrl: 'partials/quran.html', controller: 'QCtrl'});
 $routeProvider.otherwise({redirectTo: '/page/1'});

我可以放置'/trial/someExtention/1''/trial/someExtention/1/1/5'

问题是,当我执行'/trial/someExtention/1'时,它会将我发送到其他路线,而我希望它能够同时执行这两项操作而不会发送到其他地方

3 个答案:

答案 0 :(得分:2)

你可以创建一个" catchall"像这样的路线规则::ids*

这告诉路由器将/:extension /之后的所有内容存储到ids route-parameter中。您的$routeProvider可能如下所示:

$routeProvider
    .when( '/:extension/:ids*', { 
      templateUrl: 'this.html',
      controller: 'routeCtrl'
    })
    .when( '/that', { templateUrl: 'that.html' } )
    .otherwise( { redirectTo: '/that' } );

然后/:extension/:ids*将同时捕获" / Something / 1"和" / Someotherthing / 1/2/3"。在最后一种情况下,ids route-parameter将具有值" 1/2/3"。如果需要,可以将其拆分为数组,如下所示:

$scope.ids = $routeParams.ids.split("/");

如果您想仔细查看,我在此处创建了 plunker http://plnkr.co/edit/EZqMtnbRs0lKc07hnenQ?p=preview

更新:如果您不想将所有内容存储到单个ID变量中,您还可以指定可选的路由参数:

$route$routeProvider
    .when( '/:extension/:id/:id2?/:id3?', { 
      templateUrl: 'this.html',
      controller: 'routeCtrl'
    })

最后的?表示该参数是可选的。

答案 1 :(得分:1)

所以,基本上对于'/trial/someExtention/1',您的配置应该可以正常工作,以防万一看看我的小提琴http://jsfiddle.net/gRLLP/2/

如果您想同时使用一条规则捕获'/trial/someExtention/1''/trial/someExtention/1/1/5',则可以使用新功能(据我记得它是在v1.1.5中引入的):

像这样设置规则 - '/trial/*extension/add' Details about * rule

BTW,这是提交changes

答案 2 :(得分:0)

您可以将templateUrl用作可以使用您的网址参数的功能

$routeProvider.when('/subscriber/update/:action', {
    templateUrl: function(para){
       return 'partials/subscribers/'+ para.action +'.html';
    },
    controller: 'SubscriberController'
}).otherwise({
 redirectTo: '/'
});