2016-06-20 3 views
0

Я пытаюсь инициализировать коллекцию в ng-init. Почему этот код не работает?Фильтр в угловой ng-init

<div ng-app="myApp" ng-controller="PeopleCtrl"> 
    <ul ng-init="myPeople=(people|filter:{show:true})" ng-repeat="person in myPeople"> 
    <li>{{person.name}}, {{person.show}} 
    </ul> 
</div> 

CodePen

мне не нужно, используя ng-if или другие вещи, мне просто интересно, если это возможно, чтобы инициализировать коллекцию, используя фильтр в ng-init

ответ

2

ng-init не работает, когда данные поступают асинхронно, и я не думаю, что ng-init подходит для вашего дела.

Я предлагаю вам использовать псевдоним для отфильтрованных данных в самой ng-repeat, при фильтрации myPeople коллекции

ng-repeat="person in people|filter:{show:true} as myPeople" 
+0

просто ... можно ли использовать его в ng-init? Я хочу скрыть родительский элемент ng-repeat, если в элементе нет элементов, например: http://codepen.io/serhio/pen/aZmjGW?editors=1010 – Serge

0

Да, вы можете инициализировать фильтр ng-init подобные

ng-init="FilteredGeojson = (ho | filter:search)" 

С уважением.

+0

, как я в ОП? – Serge

0

Потому что вы пишете ng-init на элементе, который повторил вам ng-init код, выполняемый каждый раз для нового тега. Чтобы избежать этого, напишите ng-init somewhere.

Как это

var myApp = angular.module('myApp', []); 
 

 
myApp.controller('PeopleCtrl', function($scope, $window) { 
 

 

 
    $scope.people = ([{ 
 
    id: 17, 
 
    name: "Peter", 
 
    age: 21, 
 
    show: true 
 
    }, { 
 
    id: 07, 
 
    name: "David", 
 
    age: 20, 
 
    show: false 
 
    }, { 
 
    id: 37, 
 
    name: "Anil", 
 
    age: 22, 
 
    show: true 
 
    }, { 
 
    id: 45, 
 
    name: "Anil", 
 
    age: 19, 
 
    show: false 
 
    }]); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myApp" ng-controller="PeopleCtrl" ng-init="myPeople=(people|filter:{show:true})"> 
 
    <ul ng-repeat="person in myPeople"> 
 
    <li>{{person.name}}, {{person.show}} 
 
    </ul> 
 
</div>

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