すべての 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;
})
ここで、角度のあるフレームワークにうまく適合する優れたデザインパターンを探しています。