AngularJS 与 Facebook SDK [重复]

问题描述 投票:0回答:1

我有 AngularJS 的问题。

我想在 Facebook SDK 函数中返回值,但不允许我在变量中获取它们。

perfil_nombre
perfil_foto
变量返回为“未定义”并希望发送到范围。

有机会吗?我完全迷失了。

login.controller('inicio_ctrl', function($scope, $http, $timeout, $window)
{
      var laspaginas;
      var response;
      var perfil_foto;
      var perfil_nombre;
      var resp;
      $scope.FBLogin = function()
      {
        FB.login(function(response) 
        {
            if(response.authResponse) 
            {
                FB.api('/me', function(response) 
                {
                    perfil_nombre = response.name; //<<<<<-------- good
                    FB.api('/me/picture?redirect=false', function(resp) 
                    {
                       perfil_foto = resp.data.url; //<<<<<-------- good
                    });
                });
            } 
            else 
            {
             console.log('User cancelled login or did not fully authorize.');
            }
        }, 
        { scope: 'email, public_profile, manage_pages,publish_pages,read_insights,user_friends, publish_actions'});
        $scope.perfil_foto = perfil_foto; //<<<<<-------- undefined
        $scope.perfil_nombre =  perfil_nombre; //<<<<<-------- undefined
});
javascript angularjs facebook webapi
1个回答
0
投票

Angular 被设计为 MVC 或 MV* 框架。因此,通常最好将逻辑分离到服务中,然后将服务注入控制器中。这样你就可以防止 Angular 和其他框架之间的负面交互。很难预测 Angular 将如何与外部库交互。

最简单的方法是仅使用 javascript 让函数工作,然后将其包装在 .factory 或 .service 中。

例如

(function(){
    'use strict';
    login.factory('FBService', FBService);

    FBService.$inject = [(/*What ever dependencies are needed*/)];
    function FBService(/*What ever dependencies are needed*/){
        //Build the profile object (I assume perfil translates to profile in english)
        var profileObject;
        //Add Javascript Logic Here


        //Create Getters to obtain the data
        function getFoto(){
            return profileObject.foto;
        }

        //expose Getter
        return {getFoto: getFoto}
    }
})();

(function(){
    'use strict';
    login.controller('inicio_ctrl', inicioCtrl);

    inicioCtrl.$inject = ["$scope", "$http", "$timeout", "$window", "FBService"];
    function inicioCtrl($scope, $http, $timeout, $window, FBService){
        var ctrl = this;

        ctrl.login = function(){
            ctrl.perfil_folo = FBService.getFoto();
        }
    }
})();

如果您可以让 Javascript 在 Angular 之外工作,那么这将允许您保留工作并将其集成到 Angular 中

© www.soinside.com 2019 - 2024. All rights reserved.