4

すべての Facebook API 呼び出し (ログイン、ログアウトなど) がサービス内にカプセル化されるように、Angular プロジェクトに Facebook JavaScript ライブラリを含めたいと思います。しかし、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;
})

ここで、角度のあるフレームワークにうまく適合する優れたデザインパターンを探しています。

4

1 に答える 1

0

ここでMisko Heveryのアプローチを使用して、Facebook XHR呼び出しが「解決」されるまでコントローラーのロードを遅らせることで、これを解決できると思います。

$apply()これにより、非同期データ読み込みの問題がすべて解決されたようで、おそらく呼び出しも削除できることを意味します。

于 2013-03-12T03:14:30.027 に答える