需要在对象内重复这些对象。我可以使用带有ng-repeat的$ index来实现这一目标吗?

时间:2015-02-09 14:40:53

标签: javascript angularjs ng-repeat

我有以下名为“tabs”的javascript对象:

http://i.imgur.com/hKTj9o9.png

我在页面上的所需输出:

 section0.title
      children0.title
      children1.title

最终成为

 Analytical Balances
      ML
      XS

我已经将选项卡名称(tab0.title,tab1.title)重复为选项卡式导航,我想知道如何重复部分名称(例如section0.title)和子部分名称(例如children0.title)

我认为这可以实现这一结果:

            <div ng-repeat="tab in tabs" track by $index>
              <a>{{ tab[$index].title }}</a>
                    <ul ng-repeat="section in tabs" track by $index>
                      <li>{{ section[$index].title }}</li>
                        <ul ng-repeat="child in children" track by $index>
                          <li>{{ child[$index].title }}</li>
                        </ul>
                    </ul>
            </div>

我知道这也会重复标签标题,但我认为如果我加入顶级标题会更容易理解。然后我可以修改它,每页只显示一个标签,基于索引。

使用这样的$ index来引用javascript变量可能吗?我现在意识到这可能不是一件事。

非常感谢你的时间。

编辑:非常感谢您的投入,您几乎立即解决了我的问题。我现在看到为什么我被赶上使用$ index并且可以使用更多的帮助。我目前在显示我的标签名称时有这段代码:

<nav>
        <ul>   
               <li ng-class="getClass($index)" ng-repeat="tab in tabArray">
                    <a ng-click="toggleSelect($index)" ng-class="getLinkClass($index)">{{tab}}</a>
               </li>
        </ul>
</nav>

这不是我使用的那个“tabs”对象,而是“tabArray”,它只是一个按顺序具有顶级选项卡名称的数组。 toggleSelect使用$ index允许我根据选择的选项卡更改显示的内容,并选择哪个选项卡获取活动类。

现在回到我发布这个问题时我认为需要$ index的原因。我的“tabs”对象中的选项卡被命名为“tab0”,“tab1”等。当$ index为0时,我可以使用$ index仅重复tab0中的元素吗?这就是为什么我认为我可以使用像

这样的参考
 {{tabs["tab"+$index].title}}

或者其他什么。或者甚至将我的标签命名为“0”,“1”等,并像

一样引用
 {{tabs[$index].title}} 

在我的HTML中。

非常感谢,如果我不清楚,请告诉我。

另外参考我的简单toggleSelect方法:

 $scope.toggleSelect = function(ind){
            $scope.selectedIndex = ind;


            }

2 个答案:

答案 0 :(得分:1)

您需要根据您的迭代项进行修改,因为每个项都与您已经迭代过的项相关。

总而言之,你拥有的每个循环只有3个:

<div ng-repeat="tab in tabs">
      <a>{{ tab.title }}</a>
      <ul ng-repeat="section in tab.sections">
         <li>{{ section.title }}</li>
         <ul ng-repeat="child in section.children">
            <li>{{ child.title }}</li>
         </ul>
      </ul>
 </div>

修改:要回答您的修改,您可以将上述HTML中的第一行更改为:

<div ng-repeat="tab in tabs" ng-if="tabIsActive($index)">

在你的控制器中有:

$scope.tabIsActive = function (index) {
     //according to your edit, $scope.selectedIndex should hold the active tab index
     return $scope.selectedIndex == index;
}

答案 1 :(得分:0)

你真的不需要使用[$ index]字段,你应该能够做到这一点:

<强> tab.title

并更改标签中的&#39;

部分

到tab.sections &#39;

中的&#39; 部分

然后再做

<强> section.title

ng-repeat已经从tabs数组中提供了一个元素,该变量名为&#39; tab&#39;。同样适用于部分。