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 が明らかに空ではないため、何が起こっているのかよくわかりません。これはバグですか?

4

1 に答える 1

0

新しい promise インスタンスは、遅延インスタンスが作成されたときに作成され、deferred.promiseではなくを呼び出すことで取得できますdeferred.promise()。私はあなたのためにデモを作成しました。

Demo on jsFiddle

于 2013-08-04T03:31:35.923 に答える