AngularJS中的全局变量未更新

时间:2016-08-20 19:09:48

标签: angularjs

我一直在尝试使用AngularJS中的Facebook登录API。但我无法更新变量。

$scope.init = function () {
    $scope.name = ""
    window.fbAsyncInit = function (response) {
        FB.init({
            appId: 'xxxxxxxxxxxxxxxxxxx',
            xfbml: true,
            version: 'v2.7'
        });
        FB.getLoginStatus(function (response) {
            if (response.authResponse) {
                //Calling Fb graph api if user is log in and fetching name of user

                FB.api('/me', {
                    fields: 'name'
                }, function (response) {
                    $scope.name = response.name;
                    console.log($scope.name);  // 1
                });
                console.log($scope.name); // 2

            }
        });
    };
    console.log($scope.name); // 3
}

第一个console.log()$scope.name中显示正确的数据,即仅在FB.api中显示。但其他人没有显示更新的价值。

1 个答案:

答案 0 :(得分:2)

这是因为您的代码在fb.api调用中是异步的,并且您的$ scope.name尚未分配。

在您的代码中:

FB.api('/me',{fields: 'name'}.function(response)
{
   $scope.name=response.name; //$scope.name is assigned
   //1
   console.log($scope.name);
});

// 2
console.log($scope.name); //$scope.name is not YET assigned, because i'm called first!

Fb.api可能需要1,100或xxxms的延迟才能执行(并执行内部函数)。你的控制台记录在它下面,但是(// 2)它在执行fb.api函数后立即被调用(而不是他的决心)所以你的$ scope.name它没有被分配。

有关更多信息,请阅读有关异步回调和javascript承诺的一些教程。