2015-04-22 2 views
1

У меня есть контроллер, в котором я показываю список на странице. Я должен устранить несколько элементов списка, основываясь на некоторых флагах, присутствующих в нем. Поэтому я написал простую функцию, которая вернет логическое значение и будет использовать это значение в директиве ng-show, чтобы скрыть элементы. Функция вызывается многократно в блоке ng-repeat. Я понимаю, что если длина массива равна n, то функция должна быть вызвана n раз, только если содержимое или длина массива не будут изменены.Функция, называемая бесконечно в блоке ng-repeat

<ul> 
<li ng-repeat="item in items" ng-show="display(item)">{{item.name}}</li> 
</ul> 

Моя функция дисплей будет выглядеть следующим образом

display = function(item) 
{ 
    if(item.flag) 
     return true 
    else 
     return false; 
} 
+1

Что такое ваш вопрос? Если люди читают между строками, они могут понять это, но, возможно, сделать это немного более ясным. – Peter

+0

Вы можете просто добавить функцию фильтра в свой ng-repeat, который возвращает true или false. –

ответ

1

я попытаюсь гарантировать, что любой вызов функции в области контроллера

то есть. $ scope.display, однако, следующее может помочь сделать его более ясным.

<!-- iterate elements in items, ie. {name: "a", flag: true} --> 
<ul> 
    <li ng-repeat="item in items" ng-show="item.flag">{{item.name}}</li> 
</ul> 

и без вызова функции, так как, нг-шоу считывает логическое значение из item.flag

$scope.items = [ 
    {name: "a", flag: true}, 
    {name: "b", flag: true}, 
    {name: "c", flag: false} 
    ]; 

и выход ..

a 
b 

Надеется, что это помогает.

0

Вы можете использовать Угловая встроенный фильтр filter:

<li ng-repeat="item in items | filter: { flag: true }">{{item.name}}</li> 
Смежные вопросы