【问题标题】:Angular wait for a $http call to execute the next functionAngular 等待 $http 调用以执行下一个函数
【发布时间】:2014-12-22 10:47:31
【问题描述】:

我一直在这里寻找同样的问题,我发现了一些东西,但所有这些似乎都不适合我。让我描述一下我的场景:

我正在为自己做的一个Web应用程序添加一些功能,该Web应用程序用于管理一些客户的网页开发。每个客户都有一个网页,每个客户都有一个提案网页列表,以及谁做了那个提案,很好。

开发者名单,可以看到谁做了什么是Web应用程序中的新事物以及我的问题的原因,所以,问题是:

加载网络应用后,我会从数据库中获取开发人员列表以及拥有网页的所有客户的列表。因此,Web 应用程序要做的下一件事是自动选择列表中的第一个客户并在另一个列表中显示其建议。为此,需要开发人员列表,但由于尚未加载,我得到:

无法读取未定义的属性“0”

当我想迭代 $scope.developers 对象时

我为开发人员做的是这样的$http 调用:

 $http({
        method: 'POST',
        url: url,
        headers: {'Content-Type': 'application/x-www-form-urlencoded'}
    }).success(function(data) {
        $scope.developers = data;
    });

我知道$http 执行异步调用,但我需要一些东西等到$scope.developers 加载数据。

当我需要使用据称存储在$scope.developers 中的数据时,问题就出现了,但显然不是。我试图在.success 函数中调用使用$scope.developers 的函数,但同样的情况发生了。

我尝试在这个线程中使用解决方案,但我得到了同样的错误。

How to wait till the response comes from the $http request, in angularjs?

有什么帮助吗??如果我的问题中的某些内容不清楚,我会尝试更好地解释它。

【问题讨论】:

  • "但我需要一些东西,等到 $scope.developers 加载数据。" - 不,你不知道,Angular 进行 2 路数据绑定。这就是它的美妙之处。当您更新您观看的内容时,如果触发了摘要,您将自动检测到它(这里的情况是由于承诺)。在$http 调用上方执行$scope.developers = [] 就像答案所暗示的那样就足够了。
  • 感谢您的解释,我想我错过了 Angular 的另一个很酷的功能,再次喜欢 Angular ^^

标签: angularjs http promise wait


【解决方案1】:

请在$http调用ie之前将$scope.developers定义为空数组

app.controller("someCtrl", function($scope, $http) {

  $scope.developers = [];
    //....
  $http({
    method: 'POST',
    url: url,
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  }).success(function(data) {
    $scope.developers = data;
  });

  //..

});

【讨论】:

  • 按照您的建议进行操作,首先感谢您的帮助。对于我短暂的经验,我认为 2 路数据绑定只有在 $http 调用返回的数据或将在模板中使用而不在代码中使用的任何内容时才能正常工作。再次感谢
  • @AlbertPrats $http 在内部使用 Promise,每当一个 Promise 在 Angular 中解析时,都会安排一个摘要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多