其實我也不得不這樣做......我沒有跟我的代碼,它可能是專有的,無論如何......但它基本上是這樣的:
// create a simple factory:
app.factory('facebook', ['$window', function($window) {
//get FB from the global (window) variable.
var FB = $window.FB;
// gripe if it's not there.
if(!FB) throw new Error('Facebook not loaded');
//make sure FB is initialized.
FB.init({
appId : 'YOUR_APP_ID'
});
return {
// a me function
me: function(callback) {
FB.api('/me', callback);
}
//TODO: Add any other functions you need here, login() for example.
}
}]);
// then you can use it like so:
app.controller('SomeCtrl', function($scope, facebook) {
//something to call on a click.
$scope.testMe = function() {
//call our service function.
facebook.me(function(data) {
$scope.facebookUser = data;
//probably need to $apply() this when it returns.
// since it's async.
$scope.$apply();
});
};
});
如果有任何這些錯誤讓我知道,我會查找我的工作代碼,看看我錯過了什麼。但這應該是關於它的。
$ watch(這可能是最好的方式來提高性能)我應該在HTML中像Facebook一樣初始化SDK異步,或者init在工廠完成,並且html只包含sdk? –
該代碼似乎工作,但數據綁定不起作用的異步調用,我嘗試使用$ q和$ scope。$應用在控制器,並得到它的部分工作。但我讀到,控制器是放置這些的不好的地方。那麼如何更改工廠以使用這些異步API調用? –
只是爲了擴大@blesh的答案。 查看這個更開發的例子: http://jsfiddle.net/bradbirdsall/ggmRQ/6/ – elviejo79