【问题标题】:Return increment ng repeat in ng repeat with function angularJS使用函数 angularJS 在 ng repeat 中返回增量 ng repeat
【发布时间】:2017-09-27 18:20:32
【问题描述】:

我在另一个 ng-repeat 中有一个 ng-repeat,我需要能够获取所有记录的全局计数。

我尝试在 ng-repeat 的视图中声明一个变量,以便它添加但不起作用。

我目前有以下代码。

<body ng-app="app">
  <div class="table-responsive" ng-controller="quotesController">
    <div ng-repeat="info in datos2 track by $index">
      <h2><strong>{{info.name}}</strong></h2>
      <div ng-init='count()' ng-repeat="dato in data track by $index">
        <span>{{dato.name}}</span>
        <br> Position {{id}}
        <br />
      </div>
    </div>
  </div>
</body>

代码角度

$scope.count=function(){
    number = number + 1; 
    $scope.id=number;  
}

我需要每一个 ng-repeat 查询来为我提供它所在的数字位置。

例子:

名称 1 项目 1 - 位置 1

项目 2 - 位置 2

名称 2 项目 1 位置 3

项目 2 - 位置 4

名称 3 项目 1 - 位置 5

项目 2 - 位置 6

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

【问题讨论】:

    标签: javascript angularjs multidimensional-array angularjs-ng-repeat


    【解决方案1】:

    您可以从控制器返回一个全局计数器,并将其分配给嵌套 ngRepeat 的每个 ngInit 上的范围变量,例如:

    // Code goes here
    angular.module('app', [])
    .controller('quotesController',
      function quotesController($scope) {
        $scope.datos2 = [{
            "name": "Name 1",
          }, {
            "name": "Name 2",
          }, {
            "name": "Name 3",
          }
        ];
    
        $scope.data = [{
            "name": "ITEM 1",
          }, {
            "name": "ITEM 2",
        }]; 
    
        var number = 1;
        $scope.count = function(){
            return number++; 
        }
    
    });
    <body ng-app="app">
      <div class="table-responsive" ng-controller="quotesController">
        
        <div ng-repeat="info in datos2 track by $index">
          <h2><strong>{{info.name}}</strong></h2>
          <div ng-init='id = count()' ng-repeat="dato in data track by $index">
            <span>{{dato.name}}</span>
            <br> Position {{id}}
            <br />
            <br>
          </div>
    
        </div>
      </div>
    </body>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>

    【讨论】:

      【解决方案2】:

      您应该能够为此使用 ngInit。

      <body ng-app="app">
        <div class="table-responsive" ng-controller="quotesController" ng-init="totalCount = 1">
          <div ng-repeat="info in datos2 track by $index">
            <h2><strong>{{info.name}}</strong></h2>
            <div ng-repeat="dato in data track by $index" ng-init="position = totalCount++">
              <span>{{dato.name}}</span>
              <br> Position {{position}}
              <br />
            </div>
          </div>
        </div>
      </body>
      

      【讨论】:

      • 编辑了我的答案。 Original 将具有相同位置值的所有项目。
      • @JCFord 已经有一个ng-init='count()',所以第二个不行:plnkr.co/edit/6xTnOc9KOxpB4gEDE1lA?p=preview
      • 嗯。也许 Angular 的解析器不喜欢一元运算符。试试position = totalCount = totalCount + 1
      • @StanislavKvitash 哦,我没有注意到他已经有了一个。应该删除那个。
      【解决方案3】:

      你可以使用{{($parent.$index*data.length)+($index+1)}}

      <div ng-repeat="info in datos2 track by $index">
        <h2><strong>{{info.name}}</strong></h2>
        <div ng-init='count()' ng-repeat="dato in data track by $index">
           <span>{{dato.name}}</span>
           <br> Position {{($parent.$index*data.length)+($index+1)}}
           <br />
           <br>
        </div>
      </div>
      

      http://plnkr.co/edit/0mcgZfxmL5PBwSDp0hoo?p=preview

      【讨论】:

        猜你喜欢
        • 2017-12-22
        • 2013-11-23
        • 2012-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-12
        • 1970-01-01
        相关资源
        最近更新 更多