使用angularjs中不同请求的数据创建数组

时间:2016-04-25 11:49:36

标签: arrays angularjs json

这是我的代码,首先,我提出了第一个请求:

        $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);
                })

我们必须记住的是:  $scope.numtickets[userid.id] = {nbuser:data.users[i].name}; 我在我的阵列中输入了我的用户名并保留了用户的ID

然后我在这里提出了第二个请求,以便与我刚刚向您展示的代码保持一致:

                .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]);
                    }
                })

        };

我们需要记住的是:

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

我推送门票数量并与我用户使用的相同阵列相关联。

我的问题:

在这一行:

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

&#34; $ scope.numtickets [tabuser [i] .id]未定义。&#34;  所以它&#39;不工作有人可以帮助我吗?

我最后想要这样的事情:

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

然后在我的视图中显示这个很容易:

<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

这里是data.users的所有json: enter image description here

1 个答案:

答案 0 :(得分: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;
     })
 }

那我做了什么?我将i存储在currentI的本地for变量中。这应该有效,因为每个currentI变量都是then函数回调的本地变量,否则你的i将具有值tabuser.length。这是因为closure。在for的每次迭代中,您将为then重新创建一个新的回调函数。但是他们会有相同的闭包。他们没有共同的唯一关闭级别将是for循环中声明的每个变量。

您可能也想看看$q.all,您可以将承诺分组并将它们一起处理,使事情更简单。

注意:这是重复吗?不久前我肯定已经回答了这个问题......