0

我有一個ngRepeat指令,它根據過濾器的輸出進行計數。除了當我更改動態過濾器的值時,它的功能與預期相同。當我更改過濾器值時,ngRepeat正確過濾,但計數並不總是隨之更新。他們有時但不是每次都這樣做。我如何確保每次更新價值?AngularJS指令,當範圍變化時進行計算

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

'filterBy'變量是範圍的一部分,所以我運行的假設是改變它會提醒變化的角度......我想這是BC我用1ngInit'聲明每個行的新變量'這不是範圍 – ExceptionLimeCat 2014-12-03 22:54:31

+0

我最終創建了列表中的數據子集,然後將其附加到您建議的範圍。謝謝。 – ExceptionLimeCat 2014-12-03 23:37:51