2014-10-17 2 views
1

Предполагая следующие данные:

var roster = [ 
    { 
     id: 1, 
     attended: true, 
     person: {printName: 'Larry'}}, 
    { 
     id: 2, 
     attended: false, 
     person: {printName: 'Curly'}}, 
    { 
     id: 3, 
     attended: true, 
     person: {printName: 'Moe'}}]; 

Я пытаюсь найти количество объектов в массиве, где присутствовал правда. Я попытался следующие:

rosters.html:

{{ (roster | filter:{attended:true}).length }} 

Реестры-controller.js:

checkedInCount: function() { 
    return $filter('filter')($scope.roster, attended.true).length; 
} 

HTML-фильтр работает, как и ожидалось, возвратившись 2 в этом случае , Однако версия функции встречает ошибку ReferenceError: Can't find variable: attended. Я предполагаю, что есть что-то тривиальное, что я пропустил в функции, но я не уверен, что это такое.

+1

Пожалуйста сравните внимательно оба ваших версий. Если вы не можете найти то, что происходит, посмотрите на [ожидаемый тип] (https://docs.angularjs.org/api/ng/filter/filter) аргументов. – Blackhole

+0

Спасибо, что указали это. Я просмотрел эту страницу, но полностью не понял, как построить аргумент 'expression'. Увидев ответ @ tasseKATT, он теперь имеет смысл. –

+0

Может ли пояснитель пояснить? У моего вопроса оказался простой ответ, но я не думал, что он плохой в соответствии с этой метатойкой (http://meta.stackoverflow.com/questions/252677/when-is-it-justifiable-to -downvote-а-вопрос). –

ответ

2

Используйте объект как выражение:

return $filter('filter')($scope.roster, { attended: true }).length; 
+1

Большое спасибо, я пинаю себя за то, что не видел этого раньше. –

+0

Добро пожаловать :) – tasseKATT

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