AngularJS: получить размер сложного отфильтрованного массива

У меня сложный набор фильтров на ng-repeat. Я пытаюсь получить количество набора данных, поскольку он фильтруется через каждый список выбора.

Вот мой ng-repeat:

		<div class="trials-item {{class}}" ng-repeat="data in dataObject | byCountry : selectRegion | byRegion : selectState | byCity : selectCity | filterBy:['Phase']: selectPhase | filterBy:['Compound']: selectCompound | filterBy:['TherapeuticArea', 'TherapeuticArea_2',]: selectTherapy : 'strict' | unique: 'Id' | orderBy:'Phase' : reverse track by $index " ng-class="{'open':$index == selectedRow}" id="anchor-{{$index}}" >

Попытка использовать {{ data.length }} не работает. Я попытался использовать некоторые из решений, описанных в этом сообщении: Как отобразить длину отфильтрованных данных ng-repeat , но все они имеют дело с гораздо более простым набором фильтров, и если они будут работать с моим набором фильтров выше, я не должен правильно понимать синтаксис/порядок.


person TWLATL    schedule 20.11.2015    source источник


Ответы (1)


Вам нужно только присвоить переменную отфильтрованному dataObject и обязательно заключить выражение присваивания в круглые скобки после ключевого слова in и перед ключевым словом track.

<div class="trials-item {{class}}" ng-repeat="data in (filteredData = (dataObject | byCountry : selectRegion | byRegion : selectState | byCity : selectCity | filterBy:['Phase']: selectPhase | filterBy:['Compound']: selectCompound | filterBy:['TherapeuticArea', 'TherapeuticArea_2',]: selectTherapy : 'strict' | unique: 'Id' | orderBy:'Phase' : reverse)) track by $index " ng-class="{'open':$index == selectedRow}" id="anchor-{{$index}}" ></div>
Result: {{ filteredData.length }}

Обновить

Если у вас возникли проблемы с областью действия ваших переменных, создайте переменную объекта $scope, в которой хранятся отфильтрованные данные.

JavaScript

$scope.filtered = {};

HTML

<div class="trials-item {{class}}" ng-repeat="data in (filtered.data = (dataObject | byCountry : selectRegion | byRegion : selectState | byCity : selectCity | filterBy:['Phase']: selectPhase | filterBy:['Compound']: selectCompound | filterBy:['TherapeuticArea', 'TherapeuticArea_2',]: selectTherapy : 'strict' | unique: 'Id' | orderBy:'Phase' : reverse)) track by $index " ng-class="{'open':$index == selectedRow}" id="anchor-{{$index}}" ></div>
Result: {{ filtered.data.length }}
person ryeballar    schedule 20.11.2015
comment
Это не бомбит запрос, но также не дает мне значения, возвращаемого на выходе filteredData.length. - person TWLATL; 20.11.2015
comment
Если я могу спросить, является ли результат filteredData object или array? - person ryeballar; 20.11.2015
comment
Если filteredData не определено, то результат ng-repeat также должен быть пустым. Если это так, то проблема не в назначении, а в фильтрах. - person ryeballar; 20.11.2015
comment
Какова область действия filteredData, т. е. что бы я использовал в console.log для получения значения/типа? Я получаю набор данных, поэтому он должен иметь какое-то значение. Я подозреваю, что у меня неправильный $scope для ведения журнала. Использовал console.log($scope.filteredData); - person TWLATL; 20.11.2015