2016-02-26 112 views
1

我正在尝试使用StateHelper(请参阅下面的示例JSON)使用AngularJS UI路由器库动态绘制嵌套的导航结构。如何使用带状态助手的角度ui路由器访问“当前”嵌套状态

我正在努力寻找一种方法来访问我的嵌套模板中的儿童数组。有没有办法访问与当前模板/控制器相关的状态?

我尝试使用$state.current,但这不起作用,因为它在每个嵌套级别解析为相同的值(正确)。我需要能够访问“当前”状态,即当前正在呈现的状态。

任何想法非常欢迎!

nested.html

<ul class="nav nav-tabs"> 
    <li ng-repeat="tab in children" ui-sref-active="active"> 
     <a data-ui-sref="{{tab.name}}" ng-bind-html="tab.name"></a> 
    </li> 
</ul> 
<br /> 
<div data-ui-view></div> 

实施例导航

[{ 
    "name": "root", 
    "template": "<ui-view/>", 
    "children": [ 
     { 
      "name": "a", 
      "url": "/a", 
      "templateUrl": "static/partials/nested.html", 
      "children": [{ 
        "name": "1", 
        "url": "/1", 
        "templateUrl": "static/partials/nested.html", 
        "children": [{ 
          "name": "i", 
          "url": "/i", 
          "template": "Content for root.a.1.i" 
         }, { 
          "name": "ii", 
          "url": "/ii", 
          "template": "Content for root.a.1.ii" 
         }] 
       }, { 
        "name": "2", 
        "url": "/2", 
        "templateUrl": "static/partials/nested.html", 
        "children": [{ 
          "name": "i", 
          "url": "/i", 
          "template": "Content for root.a.2.i" 
         }, { 
          "name": "ii", 
          "url": "/ii", 
          "template": "Content for root.a.2.ii" 
         }] 
       } 
      ] 
     }, { 
      "name": "b", 
      "url": "/b", 
      "template": "Content for root.b" 
     }] 
}] 

回答

2

有一个名为$uiView附接到UI视图元素的数据字段,其包含的视图名称关联state。你可以得到state这样的:

elem.closest('[ui-view]').data('$uiView').state 

甚至

elem.inheritedData('$uiView').state 

所以,在你controller

.controller('State1Ctrl', function ($state) { 
    console.log(elem.closest('[ui-view]').data('$uiView').state); // state1 
}); 

看看这可以帮助你。而且采用ui-sref,它是可能的:

<ul class="nav nav-tabs"> 
    <li ng-repeat="tab in children" ng-class="{ active: $state.current == 'tab.name' }"> 
     <a data-ui-sref='tab.name' ng-bind-html="tab.name"></a> 
    </li> 
</ul> 

这里tab.name被认为包含你的状态。

+1

完美。非常感谢你!在我的解决方案中,我执行'$ element.data('$ uiView')。state.children'因为我在导航JSON中设置了控制器,所以data属性位于当前位于范围内的相同元素上。 – user2455157

+0

我很高兴我能够帮助你。 –