【问题标题】:how to create 3d dom in javascript using angular and ng-repeat?如何使用 Angular 和 ng-repeat 在 javascript 中创建 3d dom?
【发布时间】:2017-09-06 06:20:54
【问题描述】:

我想要实现的是使用 angular 和 ng-repeat 或 ng-option 创建一个深度为 3 的级别,但我失去了 $index 的轨迹,因为第二个和第三个级别从级别指向相同的 $index 1不是自己的水平。访问正确的索引很重要。

var A = [[[1],[2]],[[3],[4]],[[5],[6]]]

<ul> 
    <li ng-repeat="a in A track by indexA" ng-click="myFnA(indexA)">
        <ul> 
            <li ng-repeat="b in B track by indexB" ng-click="myFnB(indexB)"> 
                <ul> 
                    <li ng-repeat="c in C track by indexC" ng-click="myFnC(indexC)">

                    </li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

【问题讨论】:

    标签: javascript angularjs arrays indexing angularjs-ng-repeat


    【解决方案1】:

    使用ng-init directive 保存索引:

    还要确保嵌套的ng-repeat 使用之前的ng-repeat 变量:

    ng-repeat="itemA in A"     ng-init="indexA=$index"
    ng-repeat="itemB in itemA" ng-init="indexB=$index"
    ng-repeat="c     in itemB"
    

    演示

    angular.module("myApp",[]);
    
    angular.module("myApp").controller("myVm", function($scope) {
    
      $scope.A = [[[1],[2]],[[3],[4]],[[5],[6]]];
        
    });
    <script src="//unpkg.com/angular/angular.js"></script>
    <div ng-app="myApp" ng-controller="myVm">
      <h1>Nested ng-repeat Demo</h1>
        <ul> 
            <li ng-repeat="itemA in A" ng-init="indexA=$index"> 
               {{indexA}}:{{itemA}}
                <ul> 
                    <li ng-repeat="itemB in itemA" ng-init="indexB=$index">
                        {{indexB}}:{{itemB}}
                        <ul> 
                            <li ng-repeat="c in itemB track by $index"> 
                               A[{{indexA}}][{{indexB}}][{{$index}}]={{c}}    
                            </li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </div>

    【讨论】:

      【解决方案2】:

      您可以使用ng-init为变量分配索引

      <ul> 
          <li ng-repeat="a in A track by $index" ng-init="indexA = $index"> <!--indexA is the index of a-->
              <ul> 
                  <li ng-repeat="b in B track by $index"  ng-init="indexB = $index"><!--indexB is the index of b-->
                      <ul> 
                          <li ng-repeat="c in C track by $index"  ng-init="indexC = $index"> <!--indexC is the index of c-->
                             {{indexA}}
                             {{indexB}}
                             {{indexC}}
                          </li>
                      </ul>
                  </li>
              </ul>
          </li>
      </ul>
      

      【讨论】:

      • 谢谢,它反映了不同的价值吗?它们不应该相同。如果我将 $indexA 传递给 ng-change="myFn($indexA)",我的生活会轻松很多
      • 应该根据相关的ng重复指数反映
      • 我根据您的回答稍微更改了问题,您是否介意快速查看并验证您的回答是否有效。
      • 那行不通。您必须使用track by $index ng 重复无法识别indexA
      猜你喜欢
      • 2017-01-24
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      相关资源
      最近更新 更多