2014-05-01 2 views
1

У меня есть простой нг-повтор:Angularjs - Как толкать элементы в массив на основе BOOL значения

<li ng-repeat="country in getCountryGroups()"> 
     {{country.name}} 
</li> 

Я пытаюсь только запись отображения, если булево значение истинно:

Моего контроллера :

$scope.countries = [ 
    {name: 'France', population: 63.1, visited: true}, 
    {name: 'Spain', population: 23.5, visited: true}, 
    {name: 'Greece', population: 44.6, visited: true}, 
    {name: 'United Kingdom', population: 61.8, visited: false} 
]; 


$scope.getCountryGroups = function() { 
    var groupArrayNew = []; 

    angular.forEach($scope.countries, function (item, idx) { 
     if (groupArrayNew.indexOf(item.visited) == -1) 
      groupArrayNew.push(item.visited) 
    }); 

    return groupArrayNew.sort(); 
} 

Однако ничего не отображается на переднем конце.

ответ

1

Вы используете item.visited против item. Вам необходимо обновить операторы push и indexOf. (См последнюю часть моего ответа, потому что filter лучше в вашей ситуации)

Изменение:

groupArrayNew.push(item.visited) 

Для

groupArrayNew.push(item) 

$scope.getCountryGroups = function() { 
    var groupArrayNew = []; 
    angular.forEach($scope.countries, function (item, idx) { 
    if (item.Visited) 
     groupArrayNew.push(item)l 
    }); 
    return groupArrayNew.sort(); 
} 

Вы также можете обойти функцию и используйте встроенный в filter:

<li ng-repeat="country in countries|filter:{visited:true}">{{country.name}}</li> 

Sample plnkr, который показывает, как:

0

Что-то вроде

$scope.getCountryGroups = function() { 
    var groupArrayNew = []; 

    angular.forEach($scope.countries, function (item, idx) { 
     if (item.visited) 
      groupArrayNew.push(item) 
    }); 

    return groupArrayNew; 
} 

Хотя было отмечено в комментариях, если вам не нужно groupArrayNew для других целей (которые я не подозреваю, что вы делаете как это вычисляется каждый раз с помощью функции), вы можете добиться того, что вы хотите с фильтром

<li ng-repeat="country in countries | filter:{visited:true}"> 
    {{country.name}} 
</li> 
3

Или сделать это в шаблоне:

<li ng-repeat="country in countries"> 
    <p ng-show="country.visited">{{country.name}}</p> 
</li> 

или (как это было предложено в комментариях) использовать filter:

<li ng-repeat="country in countries | filter:{visited:true}"> 
    {{country.name}} 
</li> 
+0

делать это в шаблоне гораздо более чистого и Asy способ сделать это ... но если вам нужно, что массив в контроллере, это еще одна вещь ... –

+2

Фильтр будет лучше в этой ситуации .. – Nix

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