Angularjs $http attendre pour la réponse

Je suis un newbie, javascript/angularjs. J'en veux pour preuve un bootstrap liste lors du passage de la souris est fait sur certains éléments.

J'ai créé une directive pour que

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

la valeur de la directive est une fonction

<span class="asdf" pop-over="getVCard(id)">name</span>

la fonction vcard(id) est définie dans mon angularjs contrôleur. Il vérifie si les données sont déjà dans localstorage et si présent, renvoie les données. sinon il n' $requête http get et stocke les données dans localstorage.

$scope.getVCard = function(id){

  var vcardKey = vcardKeyPrefix+id;

  var vCardFromLS = localStorageService.get(vCardKey);
  if(vCardFromLS){
    return localStorageService.get(vCardKey);
  }

  $http.get(app.common.vcardUrl(id)).
    success(function(data){
      localStorageService.set(vCardKey,data);
    }).
    error(function(error){
      F1.common.error(data,function(){});
    });

    return localStorageService.get(vCardKey);
};

Depuis $http renvoie promesse, j'obtiens une valeur de undefined dans mon directive. Comment puis-je m'assurer que la fonction getVCard renvoie de façon synchrone?

J'ai lu un certain nombre de résultats après une recherche sur google. Mais l'a suggéré l'idée est d'utiliser les callbacks. Mais je ne suis pas sûr de savoir comment les rappels fera ce synchrone. Toute aide est appréciée.

Mise à JOUR de 1 (en réponse à Toto L du commentaire)
j'avais l'intention d'utiliser la même directive en plusieurs endroits. popovers pour cartes de visite et informations sur les produits et ainsi de suite. La seule chose qui diffère c'est l'argument de la pop-directive sur les. De cette façon, la directive s'inquiète juste de l'affichage de la popup. Où obtenir les données seront dans une fonction distincte qui est transmis à la directive

Qu'en est juste de passage dans la fonction & id séparément dans la directive? Vous pouvez appeler la fonction avec l'id en paramètre à l'intérieur & mettre en place un scope.$watch qui va déclencher lorsqu'elle retourne avec succès.
j'avais l'intention d'utiliser la même directive en plusieurs endroits. popovers pour cartes de visite et informations sur les produits et ainsi de suite. La seule chose qui diffère c'est l'argument de la pop-directive sur les. De cette façon, la directive avez à vous soucier de simplement afficher le popup. Où obtenir les données seront dans une fonction distincte qui est transmis à la directive.
Utiliser les ui-bootstrap.
pouvez-vous m'aider avec un exemple? Je ne suis pas clair comment on peut faire cela avec ui-bootstrap.

OriginalL'auteur Anirudhan J | 2013-06-28