我想把Facebook的javascript库包含在一个Angular项目中,这样所有的facebook API调用(login,logout,等等)都封装在一个服务中。但是由于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框架很好地契合。
发布于 2013-03-12 11:14:30
我认为你也许能够解决这个问题,使用Misko Hevery's approach here来延迟你的控制器的加载,直到Facebook XHR调用‘解决’。
这似乎已经解决了我所有的异步数据加载问题,可能意味着您也可以删除您的$apply()
调用。
https://stackoverflow.com/questions/15263791
复制相似问题