使用orderBy

时间:2018-02-14 23:35:03

标签: javascript angularjs typescript angularjs-ng-repeat angularjs-orderby

我有一个问题,我似乎无法弄清楚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的无序列表以及其他所有的有序列表。

我很难过,如果有人对此问题有任何意见,我们将不胜感激

干杯!

0 个答案:

没有答案