我有一个问题,我似乎无法弄清楚ng-repeat和orderBy。我尽可能地搜索并且没有找到关于这个主题的具体内容。
我在tbody和内部有一个ng-repeat,我有两个tr标签。第一个只是用列表中的每个项填充表的每一行。没有问题,工作正常。第二个问题出现了问题。我在这个tr上有一个ng-if,它会将当前数据项传递给一个函数,并根据函数内部的检查返回true / false。该函数作为范围函数存在于控制器内部。如果为true,则它将为该数据对象打印一个新行。
问题在于我还将orderyBy应用于tbodys' NG-重复。第1个tr按字母顺序按预期打印列表中的数据。但传递给第二个tr中的函数时的数据对象不是正确的数据对象。
让我用一些伪代码来说明它:
**Controller**
$scope.items = [A,C,D,A,E,A];
$scope.sortType = 'fieldName';
$scope.checkObj = function(obj) {
console.log(obj)
// Check obj logic
return true;
}
**HTML**
...
<tbody ng-repeat="item in items | orderBy:sortType">
<tr>
{{ item }}
</tr>
<tr ng-if="checkObj(item)">
Summary: {{ item }}
</tr>
</tbody>
希望上面的代码有助于我的解释。这些项目是按顺序排列的,因此表格看起来应该是
| A
| A
| A
| C
| D
| E
这正常工作,列表在ng-repeat中正确排序,并按预期按字母顺序打印出表格,但传递给checkObj函数的项目不是在该迭代中打印的项目。循环。
我的意思是:
迭代1:表打印出来&#39; A&#39; ... checkObj打印出来&#39; A&#39; 迭代2:表打印出&#39; A&#39; ... checkObj打印出&#39; C&#39; 迭代3:表打印出&#39; A&#39; ... checkObj打印出来&#39; D&#39; 迭代4:表打印出&#39; C&#39; ... checkObj打印出来&#39; A&#39; ...
由于某种原因,传递给函数的项目不是应该来自有序列表的项目。它似乎正在迭代ng-if的无序列表以及其他所有的有序列表。
我很难过,如果有人对此问题有任何意见,我们将不胜感激
干杯!