Angular ui-router,如何获取与控制器关联的状态?

时间:2014-07-30 17:26:45

标签: angularjs angular-ui-router

Plunkr演示问题:

http://plnkr.co/edit/Czc5kGpCwsruUQe2EanZ?p=preview

状态:

.state('state1', {
  url: '/state1',
  template: '<div>state1 <pre>{{current | json }}</pre><div ui-view=""></div> </div>',
  controller: 'State1Ctrl',
})
.state('state1.list', {
  url: '/list',
  template: '<div>list <pre>{{current | json }}</pre></div>',
  controller: 'State1ListCtrl',
})

控制器:

.controller('State1Ctrl', function($scope, $state, $rootScope, $controller) {
  $scope.current = $state
})

.controller('State1ListCtrl', function($scope, $state) {
  $scope.current = $state
})

产生结果:

state1
{
  "url": "/list",
  "template": "<div>list <pre>{{current | json }}</pre></div>",
  "controller": "State1ListCtrl",
  "name": "state1.list"
}

list
{
  "url": "/list",
  "template": "<div>list <pre>{{current | json }}</pre></div>",
  "controller": "State1ListCtrl",
  "name": "state1.list"
}

直接转到state1.list州。

我需要访问控制器所关联的状态,例如我希望结果是:

state1 (notice how this is different - it has the state1 configuration now)
{
  "url": "/state1",
  "template": "<div>list <pre>{{current | json }}</pre></div>",
  "controller": "State1Ctrl",
  "name": "state1"
}

list
{
  "url": "/list",
  "template": "<div>list <pre>{{current | json }}</pre></div>",
  "controller": "State1ListCtrl",
  "name": "state1.list"
}

我理解状态。$ current是当前状态,但是如何确定控制器与之关联的状态?

1 个答案:

答案 0 :(得分:2)

控制器意味着独立于ui-router中的状态,因此同一个控制器可用于任何状态。

但是你可以通过使用例如任何地方获得任何州$state.get('state1.list')

我认为你可能只需要某个人知道哪个控制器与哪个状态相关联。每个控制器是否知道与其关联的状态并调用$state.get('stateName')来获取它,或者您可以构建一个将返回控制器名称状态的服务,或者您甚至可以使用$state.get()来获取所有状态然后枚举列表,直到其中一个控制器名称与您所在的控制器匹配。

希望有所帮助。

相关问题