0

これはAngularjs $http wait for responseのフォローアップの質問です

そのための解決策を見つけることができなかったので、常に約束を返し、ディレクティブが promise.then() 関数で作業を行うようにすると考えました。

$scope.getVCard = function(id){

  var vcardKey = vcardKeyPrefix+id;

  var vCardFromLS = localStorageService.get(vCardKey);
  if(vCardFromLS){
    var deferred = $q.defer();
    deferred.resolve({data:localStorageService.get(vCardKey)});
    return deferred.promise;
  }
}

そして私のディレクティブでは、私はそれを次のように使用しています

(function(angular, app) {
  app.directive('popOver',["$window","$http",function($window,$http){
    return function(scope,elem,attrs){
      elem.on('mouseover',function(){
        console.log('mouseover');
        var promise = scope.$apply(attrs.popOver);
        promise.then(function(data){
          console.log('promise then called');
          console.log(data);
          //logic here
        });
        console.log('in directive again');
        console.log(data);
      });
    };
  }]);
})(angular, app);

しかし、promise.then() は初めて呼び出されません。それは呼び出され、その後のマウスオーバーで正常に動作します。何が問題になる可能性がありますか?

直前に $scope.$apply() を追加しようとしましreturn deferred.promiseたが、すでに適用中のエラーが発生しています。ここで何が欠けていますか?

4

1 に答える 1

1

返品する前に解決しているためだと思います。私は間違っているかもしれません。

これを試して:

$scope.getVCard = function(id){
  var vcardKey = vcardKeyPrefix+id,
    vCardFromLS = localStorageService.get(vCardKey),
    deferred = $q.defer();
  if(vCardFromLS){
    $timeout(function(){
      deferred.resolve({data:vCardFromLS});
    }, 100);
  } else {
    $timeout(function(){
      deferred.reject();
    }, 100);
  }
  return deferred.promise;
}
于 2013-06-28T14:38:47.240 に答える