angularJS为什么我在$ http

时间:2015-05-24 15:54:09

标签: javascript angularjs angularjs-directive

我无法在$ http之后获取数据,但它可以在html中获取数据 我在服务中写了$ http 这是代码

service.js:

  angular.module('todoApp.services', []).factory('TodoService', function($http) {
    return {
      get_default_data: function($scope, url, par) {
        this.send(url, par).success(function(data) {
          $scope.data = data;
        });
      }
    })

我在那里使用它

  todoApp.controller('WeekCtrl', function($scope, $http, TodoService) {
    TodoService.get_default_data($scope, 'get_default_data', {
      'type': 'week'
    });

这是问题:

console.log($scope.data)在那里:

  get_default_data: function($scope, url, par) {
    this.send(url, par).success(function(data) {
      $scope.data = data;
      console.log($scope.data)
    });
  },

它可以显示正常,但我console.log在那里

TodoService.get_default_data($scope, 'get_default_data', {
  'type': 'week'
});
console.log($scope.data)

它在控制台中显示undefined! 为什么? 如何在那里获得$scope.data

1 个答案:

答案 0 :(得分:1)

TodoService.get_default_data是异步的,这意味着它不会等待HTTP请求完成,然后再转到下一行。

所以当你在console.log上调整范围内的数据时,由于HTTP请求尚未完成,因此尚未完成,并且没有响应,因此$scope.data = data;行尚未运行

考虑到Satpal在评论中所说的内容,您可以重构代码以将承诺返回给控制器并将数据分配到范围:

<强>服务

get_default_data: function($scope, url, par) {
      return this.send(url, par);
}

<强>控制器:

TodoService.get_default_data($scope, 'get_default_data', {
      'type': 'week'
    }).success(function(data) {
         $scope.data = data;
      });