如何根据$ stateParams中的params与ui-router在不同的模板之间切换?

时间:2015-12-10 09:07:43

标签: angularjs parameters angular-ui-router

我正在使用Angularjs和ui-router构建应用程序。我的结构是一个像这样的嵌套状态。

.state('ls.resource', {
  url : '/:resource',
  abstract: true,
  template: "<div ui-view></div>"
})
  .state('ls.resource.id', {
    url: "/{id:int}",
    abstract: true,
    template: '<div ui-view ></div>'
  })
    .state('ls.resource.id.view', {
      url: '/{id:int}',
      templateUrl: '/view_location.html',
      controller: '...'
    })

现在,我想在不同的模板之间切换,但处于相同的状态。 例如:

.state('ls.resource.id', {
  url: '/',
  templateUrl: function($stateParams) {
        switch ($stateParams.resource) {
          case 'location': 
             return '/view_location.html';
             break;
      controller: function($stateParams) {
        switch ($stateParams.resource) {
          case 'location': 
             return 'LocationCtrl';
             break;
})

当资源位于&#39;和别的东西,如果不同。 (这个解决方案不起作用)。

如果你有想法解决这个问题?我在听。

1 个答案:

答案 0 :(得分:1)

要在状态中有条件地添加controller状态,您应该使用controllerProvider选项而不是controller,基本上将返回该状态的controller名称。

还要确保关闭switchtemplateUrl&amp; controller功能与}

<强>代码

.state('ls.resource.id', {
  url: '/',
  templateUrl: function($stateParams) {
         switch ($stateParams.resource) {
           case 'location': 
             return '/view_location.html';
             break;
           default: 
             return '/view_default.html';
         }
      },
      controllerPrivider: function($stateParams) {
        switch ($stateParams.resource) {
          case 'location': 
             return 'LocationCtrl';
             break;
          defautlt:
             return 'SomeDefaultCtrl' //should return some controller name
        }
      }

})