2016-11-21 1 views
1

Ich bin neu in stackoverflow, Sorry, wenn diese Frage nicht korrekt ist.ng-init funktioniert nicht, wenn mehrere Artikel in angularjs, aber für einzelne Artikel arbeiten

Ich hatte eine Funktion in ng-init innerhalb der ng-repeat (Sitzung) zu bekommen die Fragen Länge durch Weitergabe Sitzung ID.

//This is the HTML Part 
<tr ng-repeat="session in sessionslist" ng-init='getQuestionsofSession(accessors.getId(session))' > 
<td>{{session.name}}</td> 
<td>{{session.speakers.length}}</td> 
<td><p>{{questions.length}}</p></td> 
</tr> 

//This is the ANGULAR Part 
    $scope.getQuestionsofSession = function(sessionid){ 
     $http.get('/api/audiencepanel/getquestions/'+sessionid) 
      .success(function(data){     
       $scope.questions= data; 
      }); 
    }; 

//Getting sessions list 
$scope.getsessions= function(){ 
$http.get("api/getsession/"+$stateParams.id).success(function(data){ 
$scope.sessionslist = data; 
}); 

Also, wenn die Sitzungslänge Single ist, ng-init funktioniert, aber Sitzungen Länge mehrere es keine Daten zeigt. $ scope.questions ist nicht zeigt keine Daten

Übrigens, Sitzung Tabelle ist anders und Frage Tabelle ist anders, Fragen werden basierend auf Sitzungs-ID gespeichert. So brauchen Fragen Daten in Sitzungsdaten basierend auf Session-ID

Gibt es einen anderen Weg, um dies funktioniert?

+3

tun könnten Sie ng-init nicht verwenden. Es sollte fast nie verwendet werden, wie dokumentiert. Initialisieren Sie die von der Ansicht benötigten Daten direkt von Ihrem Controller. Übrigens, es macht wenig Sinn, ein einziges $ scope.questions-Feld zu haben, das die Fragen einer Sitzung enthält, da Sie mehrere Sitzungen anzeigen. –

+0

Anstatt die ng-init-Schleife durch die Sessionsliste zu verwenden und Fragen abzurufen – simon

+0

Es ist keine gute Methode, einen API-Aufruf für jedes Element innerhalb einer ng-Wiederholung auszulösen. Wonach suchen Sie eigentlich? – Aravind

Antwort

0

Innerhalb jeder ng Wiederholung haben wir einen anderen Bereich. So question Objekt in sessionslist[0] ist nicht dasselbe wie sessionslist[1]

Statt init verwenden Sie dieses

$scope.getsessions= function(){ 
    $http.get("api/getsession/"+$stateParams.id).success(function(data){ 
    angular.forEach(data, function(value, key){ 
     $http.get('/api/audiencepanel/getquestions/'+value.id) 
      .success(function(data1){     
       value.questions= data1; 
      }); 
    }); 
    $scope.sessionslist = data; 
}); 
+0

Das ist cool, hat perfekt funktioniert. – Kranthi

Verwandte Themen