2012-08-19 10 views
13

Sto cercando di creare un servizio di Facebook per Angular in modo da poter testare più facilmente il codice che deve utilizzare l'SDK JS di Facebook e l'API Graph per altre cose.Iniezione di Facebook JS SDK in controller AngularJS

Ecco quello che ho finora:

app.factory('facebook', function() { 
    return FB; 
}); 

window.fbAsyncInit = function() { 
    FB.init({ 
     appId: 'SOME_APP_ID_HERE', // App ID 
     status: true, // check login status 
     cookie: true, // enable cookies to allow the server to access the session 
     xfbml: true, // parse XFBML 
     oauth: true 
    }); 
}; 

// Load the SDK Asynchronously 
(function (d) { 
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
    if (d.getElementById(id)) { return; } 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    ref.parentNode.insertBefore(js, ref); 
})(document); 

Ora, so che la parte reale di Facebook SDK funziona ... ma nel mio controller il riferimento è sempre nullo.

nel mio controller non mi resta che qualcosa di simile:

function FooCtrl($scope, facebook) { 
    facebook.getLoginStatus(function(response) { 
     if (response.status === 'connected') { 
      var uid = response.authResponse.userID; 
      var accessToken = response.authResponse.accessToken; 
      // do something 
     } else if (response.status === 'not_authorized') { 
      // the user is logged in to Facebook, 
      // but has not authenticated your app 
     } else { 
      // the user isn't logged in to Facebook. 
     } 
    }); 
} 

angolare poi si lamenta che non riesce a trovare un facebookProvider. Qualche idea su come posso realizzare questo?

+0

Potrebbe creare un plunker? plnkcr.co, fai clic su nuovo -> angularJS –

+0

Hai provato https://groups.google.com/forum/?fromgroups#!topic/angular/YkdZsH8ax4o%5B1-25%5D? – Max

risposta

6

Racchiudere la funzione fabbrica con staffe di matrice come qui di seguito

app.factory('facebook', [function() { 
    return FB; 
}]); 

documentazione API non sono sufficientemente chiare. Il punto di parentesi tra parentesi è che è possibile specificare le dipendenze. Sarà iniettato alla creazione del tuo servizio con AUTO. $ Iniettare. Ma dal momento che non si dispone di dipendenze si salta questo compito :)

In ogni caso, se avete bisogno di dipendenze si possono richiedere come questo

app.factory('facebook', ["$log", function($someCrazyLoggerService){ 
    $someCrazyLoggerService.log("I'm Auto Injected crazy Logger"); 
}]); 
+0

Questo risolve il problema che stavo vedendo. Ora ho un'intera serie di problemi relativi alla natura asincrona del FB api ... lol ... ben lontano per affrontarlo. Grazie. –

+1

@blesh per l'ispirazione (per l'ambito) dai uno sguardo https://gist.github.com/whisher/6270204 è solo un semplice frammento – Whisher

1

si dovrebbe dare un'occhiata a questo modulo Facebook ho scritto.

Prima utilizzare FacebookProvider sulla chiamata di configurazione dell'app, qualcosa come FacebookProvider.init ('yourFacebookAppIdHere') ;, è possibile configurare anche altre impostazioni, quindi sui controller utilizzare il servizio Facebook e registrarsi agli eventi e chiamare i metodi asyncrhonously;)

https://github.com/ciul/angularjs-facebook