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

+0

Я закончил создание подмножества данных из списка, а затем привязал его к области, как вы предлагали. Благодарю. – ExceptionLimeCat

Смежные вопросы