2016-10-24 2 views
0

Problem: Ich habe eine Liste von Daten, die eine ID in jedem Datensatz enthält, die ich verwende, um einen API-Aufruf zu machen, um mehr Informationen über diesen bestimmten Artikel zu bekommen. Problem ist - ng-repeat bereits durchläuft meine Daten. Wie übermittle ich die Antwort eines anderen API-Aufrufs für jede ng-repeat-Aktion?Wie man Variablen von einem Array an ng-repeat übergibt

-Code:

Ansicht:

<div ng-repeat="activity in userActivity"> 
    <div class="row"> 
     <div class="col-md-10 col-md-offset-2"> 
      <a href="#">{[ user.fullname ]}</a> has {[ activity.action ]} to: <a href="#"> {[ post.post ]}<br> 
     </div> 
    </div> 

Winkelregler:

profileApp.controller('mainController', ['$scope', '$http', '$routeParams', function($scope, $http, $routeParams){ 
$scope.user = []; 
$scope.userActivity = []; 
$scope.post = []; 

$http.get('/api/user', {params: { id: $routeParams.id }}) 
    .success(function(res){ 
     $scope.user = res.user; 
     $scope.userActivity = res.user.activity; 

     $http.get('/api/post', {params: { postID: $scope.userActivity[0].post }}) 
      .success(function(res){ 
       $scope.post = res.post; 
     }) 
      .error(function(data, status){ 
       console.log(data); 
     }); 

    }) 
    .error(function(data, status){ 
     console.log(data); 
    }); 
}]); 

Der/api/Aktivität des Benutzers aus der Antwort sieht wie folgt aus:

"activity": [ 
    { 
     "post": "123456781", 
     "action": "agreed" 
    }, 
    { 
     "post": "123456782", 
     "action": "disagreed" 
    } 
] 

So kann jemand bitte helfen und mich in die richtige Richtung weisen, wie die Daten zusammen mit den ng-Ansicht bevölkert werden? Derzeit zeigt es nur den Beitrag post.post für 123456781, der Sinn ergibt, aber wie übermittele ich die Variablen für einen solchen Fall an die ng-Wiederholung?

Dank im Voraus

Antwort

1

res.user.activity ist ein Array,

so erste Schleife durch das $scope.userActivity Array Einer dann ein api call in Array für jeden Wert machen, und dann aktualisieren, um die $scope.userActivity Array mit einem neuen Schlüssel als post_obj ist die Antwort, die Sie in der Ansicht verwenden werden.

Dann sollten Sie Ihre Controller,

profileApp.controller('mainController', ['$scope', '$http', '$routeParams', function($scope, $http, $routeParams){ 
$scope.user = []; 
$scope.userActivity = []; 
$scope.post = []; 

$http.get('/api/user', {params: { id: $routeParams.id }}) 
    .success(function(res){ 
     $scope.user = res.user; 
     $scope.userActivity = res.user.activity; 

     for(var i=0 ; i < $scope.userActivity.length ; i++) 
     { 
      $http.get('/api/post', {params: { postID: $scope.userActivity[i].post }}) 
       .success(function(res){ 
        $scope.userActivity[i].post_obj = res.post; 
      }) 
       .error(function(data, status){ 
        console.log(data); 
      }); 
     } 



    }) 
    .error(function(data, status){ 
     console.log(data); 
    }); 
}]); 

Dann sollte Ihrer Ansicht nach,

<div ng-repeat="activity in userActivity"> 
    <div class="row"> 
     <div class="col-md-10 col-md-offset-2"> 
      <a href="#">{{ user.fullname }}</a> has {{ activity.action }} to: <a href="#"> {{ activity.post_obj }}<br> 
     </div> 
    </div 
</div> 

Array die post_obj enthalten jetzt Diese userActivity ändern geändert werden, die wir als Reaktion entsprechenden bekam jeder Beitrag

+0

Sorry ich hatte gerade den ursprünglichen Post bearbeitet. Ich habe einen Fehler gemacht, mein Problem zu erklären. Wenn ich dies tue, zeigt es mir immer das erste Element und es übergibt nicht die Variablen, wie es sollte, wenn ng-repeat ausgeführt wird –

+0

ok, was Sie brauchen, um in ng-wiederholen zu erhalten? – Sravan

+0

Die $ scope.post, die für jedes Element in/api/Benutzeraktivität aktualisiert werden soll. Im Wesentlichen ist dies, wie es funktionieren soll: Get Post (besserer Name wäre postID) aus Benutzeraktivität, die ein eindeutiger Schlüssel ist, den ich benutze, um einen API-Aufruf an/api/post mit dem Parameter mit dem Post zu machen (was die ID ist). Hoffe das klärt –

1
ng-repeat="activity in userActivity" ng-click="myFunction(activity)" 

Erstellen Sie myFunction im Controller, wodurch nur auf die Aktivität geklickt wird.

+0

Eigentlich habe ich das nicht um ehrlich zu sein. Wie auch immer, die Frage wurde beantwortet. Danke für deinen Beitrag –

Verwandte Themen