4

我想将 Facebook javascript 库包含在 Angular 项目中,以便所有 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;
})

在这里寻找一个很好的设计模式,非常适合 Angular 框架。

4

1 回答 1

0

我认为您可以在这里使用Misko Hevery 的方法来解决此问题,以延迟控制器的加载,直到 Facebook XHR 调用“解决”。

This seems to have solved all of my asynchronous data loading issues and will probably mean you can just delete your $apply() calls too.

于 2013-03-12T03:14:30.027 回答