Angular在控制器中使用$ http promise数据

时间:2017-03-02 02:34:35

标签: angularjs angular-promise

我正在尝试使用我的控制器从工厂使用$ http承诺。下面的代码有效,我可以通过调用{{users}}

来查看视图中的用户变量

工作工厂:

.factory('bidsCreatedSimple', ['$http', function($http) {
    // Expose public API first, use func notation
      return { 
          getUsers: getUsers,
      };

      function getUsers(){
          return $http.get('/bids.json');
      }
}])

在控制器中:

$scope.users = []; //visible in the view

activate();

function activate(){
    bidsCreatedSimple.getUsers().then(function(users){
      $scope.users = users.data;
    });
} 

console.log($scope.users); //returns a blank [] even though
                           //it renders with data in the view

如何在控制器中使用$ scope.users变量?我需要将它的数据用于控制器中的其他一些对象。

1 个答案:

答案 0 :(得分:2)

你的代码没问题。 $scope.users填充数据,但console.log($scope.users)请求在$http请求返回之前执行 - 因此您需要控制台。记录您在代码顶部声明的空数组。< / p>

在回调中添加console.log行,您将看到您的用户(假设数据从您的后端正确返回)

bidsCreatedSimple.getUsers().then(function(users){
      $scope.users = users.data;
      // here $scope.users is filled with the .json data
      console.log($scope.users)
      // put here your code to manipulate users (or call a function that does that properly)
    });
// here the $scope.users is undefined, because when this line executes, the request from get users hasn't returned yet (and the callback function hasn't executed either)
console.log($scope.users)

这是由于ajax请求中的异步 - 您需要等待数据,直到请求返回才能使用它。