如何处理AngularJS或Ionic上的特定路由状态url参数?如何对特定参数进行路由状态覆盖?

时间:2016-08-25 14:09:17

标签: javascript angularjs ionic-framework routes angular-ui-router

我的问题很简单,但我无法在其他任何地方找到解决方案。

例如,我有一个带参数的正常路线状态,

  .state('page', {
    url: '/page/:pageid',
    templateUrl: 'templates/pages.html',
    controller: 'pagesCtrl'
  })

但是,例如,如果我有1000页,但对于1号和999页,我必须使用另一个模板。我怎么能这么做呢?像

这样的东西
  .state('page', {
    url: '/page/:pageid',
    templateUrl: 'templates/pages.html',
    controller: 'pagesCtrl'
  })
  .state('page', {
    url: '/page/1',
    templateUrl: 'templates/page1.html',
    controller: 'pagesCtrl'
  })
  .state('page', {
    url: '/page/999',
    templateUrl: 'templates/page999.html',
    controller: 'pagesCtrl'
  })

这会起作用吗?我测试过,后两个选项没有用参数覆盖原始状态。

如果我想使用同一个控制器,如何在控制器中加载1和999作为pageid参数?

1 个答案:

答案 0 :(得分:1)

绝对不应该为单独的模板增加两个状态。您应该使用单个通用状态,它将在传递状态参数的帮助下使用templateUrl

<强>代码

.state('page', {
    url: '/page/:id',
    templateUrl: function($stateParams){
      var template = $stateParams.id.indexOf([1, 1000]) > -1?'pages.html'
                                                            :'page'+$stateParams.id+'.html';
      return 'templates/'+template ,
    }
    controller: 'pagesCtrl'
})