0

我有一项服务,可以将对象定义到其中。

app.factory('Store', function($http, $q){
  var obj = {
   data : [],
   load:function(params){
       var def = $q.defer();
       var count = 0;
       var nb = 0;
       while(var i<10){
           count++;
           Anotherservice.getData(i).then(function(result){
               obj.data.push(result);
               nb++;
               if(nb==count){
                     def.resolve(obj);
               }
           });
           i++;
       }
       return def.promise();
    }
 }

 return{
   load : function(params){
       var deferred = $q.defer();
       obj.load(params).then(function(dd){
           deferred.resolve(dd);
       }
       return deferred;
   }
 }
});

在我的控制器中,我有

Store.load("abc").then(function(stObj){
  $scope.stObj = stObj;
  console.debug($scope.stObj.data); <--- debug the array with its content correctly
  $scope.stObjData = stObj.data;
  console.debug($scope.stObjData); <--- debug the array with its content correctly
});

而在我看来,

{{stObj}} -> displays the obj correctly, with obj.data as a property containing all the results.

{{stObj.data}} -> displays an empty array (while it should display data inside)
{{stObjData}} -> displays an empty array (while it should display data inside)

<div ng-repeat="res in stObj.data">
  {{res}} <-- doesn't display anything
</div>

我卡在这里,我真的不明白这是怎么回事,因为stdObj显然不是空的,是不是一个bug?

4

1 回答 1

0

创建延迟实例时会创建一个新的 Promise 实例,并且可以通过调用deferred.promise而不是deferred.promise(). 我为你创建了一个演示。

Demo on jsFiddle

于 2013-08-04T03:31:35.923 回答