我有一个ng-repeat,它会生成一系列表行。一列标题为“任务状态”,如果状态显示“已完成”,我认为没有理由显示它,因为作业已完成。
我用了ng-show = values!= 0;这最初起作用,直到我添加一个增量来编号任务。
我发现数据=“完成”并没有从DOM中完全删除,仍然在列表中进行重新设置,从而破坏了增量。见下图:
因此第2行和第3行是等于“完成”的数据。我该怎么做才能忽略它们?
这是我的标记:
<table class="backlog table table-bordered table-striped" width="100%" border="0" cellpadding="0" cellspacing="0" summary="Our Jira Backlog">
<tbody>
<tr>
<th>Priority</th>
<th>Task Priority Score</th>
<th>Task Summary</th>
<th>Due date</th>
<th>Task Status</th>
</tr>
<tr ng-repeat="issue in issues | orderBy: '-fields.customfield_12401'" ng-if="issue.fields.status.statusCategory.name != 'Done'">
<td>{{ $index + 1 }}</td>
<td>{{ issue.fields.customfield_12401 }}</td>
<td>{{ issue.fields.summary }}</td>
<td>{{ issue.fields.customfield_13700 }}</td>
<td>{{ issue.fields.status.statusCategory.name }}</td>
</tr>
</tbody>
</table>
所以来自“issue.fields.status.statusCategory.name”的任何内容都需要被忽略,因此优先级(第一列)为1,2,3,4,5等,并且不显示“完成”任务状态列。
答案 0 :(得分:1)
我认为处理这种情况的最佳方法是首先过滤数组。您可以在ng-repeat表达式中过滤所有数组,只需保留可在模板中引用的过滤器输出的变量(如果需要)。
查看此SO问题的答案:AngularJS - how to get an ngRepeat filtered result reference
编辑:澄清我认为您应该将ng-if更改为自定义过滤器,并在ng-repeat索引过滤后的数组之前应用它:
<tr ng-repeat="issue in (filteredIssues = (issues | orderBy: '-fields.customfield_12401' | filter: customFilterFunction))">
<td>{{ $index + 1 }}</td>
答案 1 :(得分:0)
您应该能够将ng-if
作为过滤器,并且只需将$index
移至$index
作为track by
,就可以继续增加ng-repeat
。 :
<tr ng-repeat="issue in (issues | orderBy: '-fields.customfield_12401') track by $index" ng-if="issue.fields.status.statusCategory.name != 'Done'">
您的$index
应与正在执行的for-each
的索引匹配,即使已实施ng-if
。
更新:我相信我的问题解释错了。您希望$index
跳过您&#34;已完成&#34;行?那不清楚......
正如@ Ericson578建议的那样,您应该自定义filter
以删除&#34;完成&#34;你的数组中的行。
<tr ng-repeat="issue in ((issues | removeDoneRows) | orderBy: '-fields.customfield_12401') track by $index" >
...以及您的removeDoneRows
过滤器(请为此提供更好的名称):
angular.module('myFilter', [])
.filter('removeDoneRows', function() {
return function(arr) {
var retval = [];
for(var i = 0; i < arr.length; i++){
if(arr[i].fields.status.statusCategory.name.toLowerCase() != "done")
retval[retval.length] = arr[i];
}
return retval;
};
})