如何在角度中包含Facebook JS库?

时间:2013-03-07 05:29:04

标签: angularjs facebook-javascript-sdk

我想在一个Angular项目中包含Facebook javascript库,以便所有facebook API调用(登录,注销等)都封装在一个服务中。但是由于FB库的异步特性,我的代码看起来过于冗长,而且我有几次调用$ rootScope.apply(),我不确定这是最佳实践。

现在我有这样的事情:

app.factory('Facebook', function($rootScope, $window, $q){
  var FBdefer = $q.defer();
  var FBpromise = FBdefer.promise;
  $window.fbAsyncInit = function(){
    $rootScope.$apply(function(){
      FB.init(/* FB init code here*/);
      FBdefer.resolve(FB);
    }
  }

  var fb_service_api = {
    login: function(){
      var deferred = $q.defer();
      FBPromise.then(function(FB){
        FB.login(function(response){
          $rootScope.$apply(
            deferred.resolve(response)
          );
        });
      }
      return deferred.promise.
    }
  }

  return fb_service_api;
})

在这里寻找一个适合角度框架的良好设计模式。

1 个答案:

答案 0 :(得分:0)

我认为您可以使用Misko Hevery's approach here解决此问题,以延迟加载您的控制器,直到Facebook XHR调用已“解决”。

这似乎解决了我的所有异步数据加载问题,可能意味着您也可以删除$apply()来电。