AngularJS:$ http成功回调中的范围问题

时间:2014-07-30 17:46:11

标签: javascript angularjs angularjs-scope angularjs-controller angularjs-factory

我使用PHP将数据导入我的工厂,这在控制器内的成功回调函数中正确显示。但是,即使在将返回的数据分配给$ scope.customers之后,如果我在回调之后执行console.log($ scope.customers),并且我的视图[ng-repeat],它就不存在了。也没有把它捡起来。

如果我将返回的数据分配给我的$ scope对象,我知道为什么我的数据范围仅限于成功回调内部?

var customersController = function($scope, customersFactory) {
  $scope.customers = [];
  customersFactory.getAllData()
    .success(function(customers) {
      $scope.customers = customers;
      console.log($scope.customers); // Object with correct data
    }); // No errors so only showing happy path
  console.log($scope.customers); // empty []
};
customersModule.controller('customersController', ['$scope', 'customersFactory', customersController]);

2 个答案:

答案 0 :(得分:2)

$ http函数异步发生。因此,在customersFactory.getAllData之后调用console.log将始终为空。

console.log($scope.customers); // Object with correct data

实际上发生在

之后

console.log($scope.customers); // empty []

您可以信任成功回调以正确设置$scope.customers,您只需要您的网站了解它将在以后发生。如果您需要在加载视图之前填充scope.customers,请考虑在控制器上使用resolve。

答案 1 :(得分:0)

难道不是'吨

console.log($scope.customers); // empty []

之前执行
console.log($scope.customers); // Object with correct data

第二个是成功()回调,所以它可以比第一个回执晚得多。