我有一个ngRepeat
指令,根据过滤器的输出进行计数。这是按预期运行,除非我更改动态过滤器的值。当我更改过滤器值时,ngRepeat
会正确过滤,但计数不会随时更新。他们有时但不是每次都这样做。如何确保每次更新值?
ngRepeat
<li class="list-group-item" data-ng-repeat="e1 in events | availFilter:filterBy | unique:team" ng-init="teamCount = (events | availFilter:filterBy | filter:{team:e1.team})">
<div class="list-group-item-header" data-ng-click="headerClick($event)" >
<span class="title">{{ e1.team }}</span>
<span class="badge">{{ teamCount.length }}</span>'
</div>
控制更改过滤器
<li role="presentation" data-ng-class="{ active: activeTab('today') }">
<a data-ng-click="filterBy = 'today';">Today</a>
</li>
<li role="presentation" data-ng-class="{ active: activeTab('before8') }"><a data-ng-click="filterBy = 'before8';">Before 8am</a></li>
<li role="presentation" data-ng-class="{ active: activeTab('after5') }"><a data-ng-click="filterBy = 'after5';">After 5pm</a></li>
过滤
availApp.filter('availFilter', function () {
return function (collection, term) {
var outCollection = [];
switch(term){
case 'today':
outCollection = collection;
break;
case 'before8':
angular.forEach(collection, function(item){
if(item.start.getHours() < 8)
outCollection.push(item);
});
break;
case 'after5':
angular.forEach(collection, function(item){
var hr = item.end.getHours();
var min = item.end.getMinutes();
if(hr > 17 || (hr == 17 && min > 0))
outCollection.push(item);
});
break;
default:
break;
}
return outCollection;
};
});
答案 0 :(得分:0)
Angular不知道你的过滤器逻辑何时发生变化,这是这里的根本问题。
它更新的时间将是由于重新计算过滤器的其他一些摘要操作。我拥有的最佳解决方案是不在过滤器中执行这种逻辑,而是将其作为角度IS意识到的范围变量公开。例如。你有一个列表,你创建这个列表的一个子集作为范围变量,并随着事情的变化更新。