【问题标题】:How to deal with specific route state url parameters on AngularJS or Ionic? How to do route state override on specific parameters?如何处理 AngularJS 或 Ionic 上的特定路由状态 url 参数?如何对特定参数进行路由状态覆盖?
【发布时间】:2017-01-02 00:31:06
【问题描述】:

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

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

  .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'
  })

这行吗?我测试了,后面2个选项都没有用参数覆盖原来的状态。

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

【问题讨论】:

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


    【解决方案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'
    })
    

    【讨论】:

    • 哦,非常感谢!所以我可以在那个函数中进行条件检查,对吧?
    猜你喜欢
    • 2015-04-24
    • 2021-02-24
    • 2017-04-04
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2018-04-28
    • 2021-02-22
    • 1970-01-01
    相关资源
    最近更新 更多