2016-11-24 19 views
0

私は多くのソリューションを試しました下記のエラーのために何も私のために働いています私は実装のために "https://developers.facebook.com/docs/javascript/howto/angularjs"を尊敬しています。FB init関数がangularJsで動作していません

「エラー:FBが定義されていない」私は、コントローラとサービスのファイルについては、以下の私のコードを共有しています

を。

socialMedia.js -controller

'use strict'; 
app 
.controller('SocialMediaController', [ 
    '$rootScope', '$scope', '$location', '$cookieStore' , 'SocialMedia', 'ngToast','$window', 
     function ($rootScope, $scope, $location, $cookieStore, SocialMedia, ngToast,$window) { 

     $window.fbAsyncInit = function() { 
      FB.init({ 
       appId: '************', 
       status: true, 
       cookie: true, 
       xfbml: true, 
       version: 'v2.4' 
      }); 
     }; 

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

     $scope.testAPI = function() { 
      SocialMedia.getMyLastName() 
      .then(function(response) { 
       $scope.last_name = response.last_name; 
      } 
      ); 
     }; 

    } 
]); 

socialMedia.js -Services

'use strict'; 
app 
.factory('SocialMedia', [ 
    '$http', '$cookieStore', '$rootScope', 'appApi', function ($http, $cookieStore, $rootScope, appApi) { 

     return { 
      getMyLastName: function() { 
       var deferred = $q.defer(); 
       FB.api('/me', { 
        fields: 'last_name' 
       }, function(response) { 
        if (!response || response.error) { 
         deferred.reject('Error occured'); 
        } else { 
         deferred.resolve(response); 
        } 
       }); 
       return deferred.promise; 
      } 
     } 
    } 
]); 

HTMLファイル

<input type="button" ng-click="testAPI()" value="Save" class="btn btn-primary md-trigger" /> 

私はこれで間違っているところを私にkonwしてみましょう。

+0

ありがとうございます。私はあなたのsocialMediaサービスがその前にFB.apiを呼び出していると仮定します。私はどちらのログイン機能も見ません、btw。とにかく/私はとにかく動作しません。 – luschn

+0

多分これはちょっとした助けになります:http://www.devils-heaven.com/facebook-javascript-sdk-login/ – luschn

答えて

0

SDKが非同期にロードされた後にFB関数を呼び出します。それ以外の場合は、「FBが定義されていません」と表示されます。

このコードをAngularJsスクリプトの外に置きます。

// Load the SDK asynchronously 
(function(d, s, id) { 
     var js, fjs = d.getElementsByTagName(s)[ 
     if (d.getElementById(id)) return; 
     js = d.createElement(s); js.id = id; 
     js.src = "//connect.facebook.net/en_US/sdk.js"; 
     fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk')); 

コードはテストされていませんでした。

-1

uはあなたが常にあなたがそれを使用する前にFBを宣言する必要があり、ことを使用する場合

'use strict';

削除してください。 これを削除することは厳しいです。私はこの問題を解決できると思います。

これは私が知っている最良の解決策です。

はちょうどあなたがFB.init AFTER FB.apiを使用していることを確認してくださいあなたに Chathula

+0

私はこれを私のために働かないようにしました。ありがとう! –

+0

申し訳ありませんが、それは完全に間違っています:https://developer.mozilla.org/docs/Web/JavaScript/Reference/Strict_mode – luschn

関連する問題