我有 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
});
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 中