У меня проблема с фильтрацией наборов результатов в ng-repeat. Фильтр запускается на каждой итерации через цикл ng-repeat (поэтому, если у меня есть 10 отправлений, возвращаемых currentDispatch.dispatches
он будет работать 10 раз). В первый раз, хотя, runs
будет только 1 элемент. В следующий раз через это будет 2, затем 3 и так далее. Как выглядят результаты на моем экране...
[1], [1], [1,3], [1,3,4]
Как я могу сделать это, чтобы он запускал фильтр только один раз, поскольку он имеет все элементы для фильтрации? Мне нужен только конечный набор результатов, а не результат каждой итерации.
мой собственный фильтр
angular.module('prototype').filter('dispatchedForMyEquipment', ['Config', function(Config){
return function(runs){
var result = []
var myEquipment = Config.getEquipment();
runs.forEach(function(run, index, array){
myEquipment.forEach(function(dispatchEquipment, index, array){
if (run.units.indexOf(dispatchEquipment)!= -1){
result.push(run);
return
}
});
})
return result
}
}])
мое предложение ng-repeat
<tr ng-repeat-start="dispatch in ($state.current.data.latest ?
(currentDispatch.dispatches | orderBy: '-time' | dispatchedForMyEquipment)
: (currentDispatch.dispatches | orderBy: '-time')) track by $index">
Я возьму трек по индексу $ index, как только я исправлю проблему.
Ng-repeat действительно наблюдает за собой, возможно, вы получаете данные через запрос ajax. Сказав, что просто замаскируйте свой ng-repeat с помощью ng-if с условием, что у него есть все 10 элементов... Грязный путь вправо.