首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FB init函数在angularJs中不起作用

FB init函数在angularJs中不起作用
EN

Stack Overflow用户
提问于 2016-11-24 14:36:00
回答 2查看 612关注 0票数 0

“错误:未定义FB”

我在下面分享了控制器和服务文件的代码。

socialMedia.js -Controller

代码语言:javascript
复制
'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

代码语言:javascript
复制
   '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文件

代码语言:javascript
复制
<input type="button" ng-click="testAPI()" value="Save" class="btn btn-primary md-trigger" />

让我知道我在这件事上哪里错了。

EN

回答 2

Stack Overflow用户

发布于 2016-11-24 14:47:51

在SDK异步加载后调用您的FB函数,否则会抛出"FB未定义“。

将这段代码放在AngularJs脚本之外。

代码语言:javascript
复制
// 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'));

代码未测试,请测试并更新回来。

票数 0
EN

Stack Overflow用户

发布于 2016-11-24 14:56:44

尝试删除

'use strict';

当你使用它的时候,你总是需要在使用它之前声明FB。删除它使用严格我认为你可以解决这个问题。

这是我所知道的最好的解决方案。

谢谢你查图拉

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40779505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档