2016-06-20 21 views
0

Ich brauche ein Array erstellen in den folgenden Merkmalen basiert:AngularJS - ng-init-Richtlinie verschachtelt in ng-Repeat-Richtlinie

Jedes Mal, wenn die ng-Repeat-Richtlinie Liste ein Objekt der init() Funktion sendet automatisch diese Parameter an den Controller, um ein Objekt zu bekommen.

<div data-ng-repeat="user in users" data-ng-init="init(user.id)"> 

Auf der anderen Seite empfängt die Funktion init() diese Parameter und gibt dann ein Objekt zurück.

// Suppose I have 5 parameters in order to get 5 publications 
$scope.init = function(id){ 
    $http.get("getPublicationByID/"+id) 
    .success(function(data, status, headers, config){ 
     // Here is the object that I need to create an array 
     $scope.publication = data; }) 
    .error(function(data, status, headers, config){ 
     $log.error("Error!")}) 
} 

Meine Frage ist, wie kann ich ein Array basierend auf all diesen Objekten erstellen?

Antwort

1

Anstatt ng-init für jedes ng-repeat-Element zu verwenden, könnten Sie einfach das Benutzerobjekt durchlaufen und Ajax für jeden Benutzer aufrufen und alle Publikationen zusammen erfassen.

Dafür benötigen Sie $q API .when & .all Methode zu warten, um zu verwenden, bis alle Versprechen gelöst bekommen.

-Code

getAllPublications function(){ 
    var promiseArray = []; 
    $scope.publications = [] 
    angular.forEach($scope.users, function(user){ 
     promiseArray.push($q.when($http.get("getPublicationByID/"+user.id))); 
    }) 
    $q.all(promiseArray).then(function(response){ 
     $scope.publications = response; //response is array of all publications 
    }) 
} 
+0

Hallo, habe ich die gleiche Frage näher erläutert. Kannst du eine Hand geben? Das ist die Frage [link] (http://stackoverflow.com/questions/38154332/angularjs-nested-ng-repeat-using-two-objects) – wilson