为什么这个工厂返回$$状态对象而不是response.data?

Ale*_*ner 9 state factory angularjs

所以我在服务器中有一组对象,我想在页面加载时填充ng-repeat.

我有一个工厂从服务器上的资源中获取列表,如下所示:

  app.factory('objectArray', ['$http', function($http) {
      // This is returning a $$state object
      // instead of response.data...
      return $http.post('/get_collection').then(function(response) {
          console.log(response.data);
          return response.data;
      });
  }]);
Run Code Online (Sandbox Code Playgroud)

在使用ui-router和state声明中的resolve属性之前,我已经有了这段代码.但是当将这个工厂直接注入我的控制器时,而不是获得response.data我得到一个$$状态对象.

我的控制器看起来像这样:

 app.controller('applicationController', ['$scope', 'objectArray', function($scope, objectArray) {
     $scope.array = objectArray;
     console.log($scope.array);
 }]);
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 10

$ http服务返回的内容(也就是objectArray服务)被称为promise.您可以通过注册将在数据可用时调用的回调函数来访问实际数据,即当对http请求的响应从服务器返回时:

objectArray.then(function(data) {
    $scope.array = data;
});
Run Code Online (Sandbox Code Playgroud)

使用resolve时直接访问数据的原因是路由器在resolve函数返回promise时等待promise的解析.只有这样,它才会从promise中提取数据并将数据注入控制器.

为了更好地理解承诺,您可以阅读以下文章(及其续集).