【问题标题】:Can't retrieve Angularjs $scope array last object无法检索 Angularjs $scope 数组最后一个对象
【发布时间】:2016-09-28 07:27:03
【问题描述】:

我在 angularjs 中有一个包含 $scope 对象的数组。我成功地将对象推入数组。它显示数组是控制台中的形式,但我无法像 javascript 中的普通数组那样检索数组的最后一个对象。以下是我的代码。

$scope.messages = [];

$http.get("http://localhost/php/retrieve_message.php").success(function (data)
{
    for (i = 0; i < data.length; i++)
    {
        $scope.messages.push(data[i]);
        console.log("success");
    }
}).error(function ()
{
    console.log("error");
});
console.log([$scope.messages); console.log($scope.messages[$scope.messages.length - 1]);

【问题讨论】:

  • $http 是一种异步方法。如果您在其中console.log,则返回空或未定义。
  • 但我用 console.log($scope.messages);它显示一个对象列表。现在的问题是我想在 $scope.messages 数组中获取最后一个对象
  • 就像@Davide 说的那样——方法是异步的,这意味着你不能在get 方法之外console.log 它并怀疑它已经完成了从服务器拉取数据。跨度>
  • 是的,正如大卫所说,$http 是异步的,这意味着它将触发 http 请求并继续执行其余代码。收到响应后,将执行成功/失败函数。
  • @ŁukaszTrzewik 谢谢。今天学习新事物

标签: javascript angularjs arrays object


【解决方案1】:

这是正确的。

$scope.messages = [];

$http.get("http://localhost/php/retrieve_message.php").success(function(data) {
    for (i = 0; i < data.length; i++) {
        $scope.messages.push(data[i]);
        console.log("success");
    }
    console.log($scope.messages);
    console.log($scope.messages[$scope.messages.length - 1]);
}).error(function() {
    console.log("error");

});

【讨论】:

  • 谢谢,问题解决了
  • @chanyoonghon 所以接受我的回答。
  • 但是如果我想在 $http 之后的其他地方使用数组。我可以这样做吗?
  • @chanyoonghon 你可以使用你的数组到success 或者你可以考虑github.com/caolan/async
【解决方案2】:

您正在创建Asynchronous request

在这种情况下,您会在收到数据后收到回调, 这让浏览器在您的请求期间继续正常工作 正在处理中。

 $scope.messages = [];

  $http.get("http://localhost/php/retrieve_message.php").success(function(data){
       for(i=0; i<data.length; i++){
            $scope.messages.push(data[i]);
             console.log("success");
       }
    // put your code in success method
    console.log($scope.messages);
    console.log($scope.messages[$scope.messages.length - 1]);

    }).error(function() {
        console.log("error");
    });

在您的情况下,您正在访问列表before the data has been received。 所以 $scope.messages 的长度是0 并且你试图得到$scope.messages[-1]

您可以了解有关同步和异步请求的更多信息 here

【讨论】:

    【解决方案3】:
    $scope.messages = [];
    
      $http.get("http://localhost/php/retrieve_message.php").success(function(data){
           // this callback function gets executed only after server returns a successful response. So, here you have access to data you have got from the server.
           for(i=0; i<data.length; i++){
                $scope.messages.push(data[i]);
                 console.log("success");
           }
           console.log([$scope.messages);
           console.log($scope.messages[$scope.messages.length - 1]);
        }).error(function() {
            console.log("error");
        });
        // Following code executes before even server returns data.
        //console.log([$scope.messages);
        //console.log($scope.messages[$scope.messages.length - 1]);
    

    【讨论】:

      【解决方案4】:

      尝试将你的 for 循环更新为:

      for(var x in data){
          $scope.messages.push(x);
          console.log("success");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-08
        • 2017-03-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多