2016-04-25 3 views
-1

hier ist mein Code, vor allem habe ich eine erste Anfrage:erstellen Array mit Daten aus unterschiedlichen Anfrage in AngularJS

 $scope.displayuser = function(id){ 
      var token = "xxxxx"; 
      userdisplay 
       .send(token,id) 
       .then(function(data){ 
        console.log(data); 
        $scope.userbyorga = data.users; 
        $scope.numtickets = []; 
        for(i = 0; i < data.users.length; i++){ 
         var userid = data.users; 
         $scope.numtickets[userid.id] = {nbuser:data.users[i].name}; 
         var userarray = JSON.stringify(userid); 
         localStorage.setItem("myid",userarray); 
        } 
        console.log($scope.numtickets); 
       }) 

was müssen wir uns daran erinnern, dass: $scope.numtickets[userid.id] = {nbuser:data.users[i].name}; Ich eindrücken mein Array der Name meines Benutzer und halten Sie die ID des Benutzers

dann ich hier eine zweite Anforderung, die mit dem Code im Einklang i zeigte einfach:

   .then(function(){ 
        var tabuser = JSON.parse(localStorage.getItem("myid")); 
        console.log(tabuser); 
        var urls = []; 

        for(i = 0; i < tabuser.length; i++){ 
         urls.push({ 
          url:JSON.stringify("https://cubber.zendesk.com/api/v2/users/"+tabuser[i].id+"/tickets/requested.json") 
         }); 

         console.log(tabuser[i].id); 
         console.log($scope.numtickets[tabuser[i].id]); 
         displayfilter 
          .user(token,tabuser[i].id) 
          .then(function(data){ 

           $scope.numtickets[tabuser[i].id]['nbticket'] = data.tickets.length; 
           console.log($scope.numtickets); 
           console.log(data.tickets.length); 

          }) 
         console.log(tabuser[i]); 
        } 
       }) 

     }; 

Und was brauchen wir hier daran zu erinnern, ist dies:

$scope.numtickets[tabuser[i].id]['nbticket'] = data.tickets.length; 

ich bin die Anzahl der Tickets und assoziieren mit dem gleichen Array drängen ich für meine Benutzer verwendet.

Mein Problem:

ist auf dieser Linie: "$ scope.numtickets [tabuser [i] .id] nicht definiert ist"

$scope.numtickets[tabuser[i].id]['nbticket'] = data.tickets.length; 

Es funktioniert also nicht. Kann mir jemand helfen?

ich so etwas wie dies am Ende möchte:

{ 
    1: { 
     'nbuser': 'User name1', 
     'nbticket': '1', 
     }, 
    2: { 
     'nbuser': 'User name2', 
     'nbticket': '2', 
    } 
    3: { 
     'nbuser': 'User name3', 
     'nbticket': '2', 
     } 
} 

und dann wäre es einfach angezeigt werden diese meiner Ansicht nach wie:

<ul ng-repeat="user in numtickets track by $index"> 
     <li>{{user.nbuser}}</li> 
     <li>{{user.nbticket}}</li> 
</ul> 


console.log($scope.numtickets[userid.id]); 

enter image description here

hier ist alles der json für data.users: enter image description here

+0

Könnten Sie den Wert von userid.id anzeigen? –

+0

siehe mein update :) – xenurs

+0

Ist das der Inhalt der data.users? Ich frage nach der ID-Eigenschaft der Benutzer. –

Antwort

1
for(i = 0; i < tabuser.length; i++){ 
     var currentI = i; 
     displayfilter 
      .user(token,tabuser[i].id) 
      .then(function(data){ 
       $scope.numtickets[tabuser[currentI].id]['nbticket'] = data.tickets.length; 
    }) 
} 

Also was habe ich getan? Ich habe die i in einer lokalen currentI Variable der for gespeichert. Dies sollte funktionieren, da jede currentI-Variable für den Callback der then-Funktion lokal ist, andernfalls wird Ihr Wert tabuser.length sein. Dies ist wegen closure. Auf jeder Iteration von für Sie wird eine neue Callback-Funktion für die dann neu erstellen. Sie werden jedoch dieselben Schließungen haben. Die einzige Closure-Ebene, die sie nicht gemeinsam haben, ist jede Variable, die in der for-Schleife deklariert wird.

Vielleicht möchten Sie auch einen Blick auf $q.all zu können Sie Versprechen und verarbeiten sie alle zusammen, was die Sache einfacher machen.

Hinweis: Ist das ein Duplikat? Ich war mir sicher, dass ich das schon vor nicht allzu langer Zeit beantworten konnte ...

Verwandte Themen