AngularJS在请求之外检索数据

时间:2015-04-27 10:28:23

标签: angularjs angularjs-directive angularjs-scope angularjs-service

我在访问服务请求之外的数据时遇到问题。请参阅下面的代码。该变量在服务请求中起作用。但是当我想在请求之外访问变量时,我得到一个未定义的变量。

有谁知道如何解决这个问题?

   API.getUser($scope.email, $scope.password).then(function(data) {
            $scope.user_id = (data.id);
            console.log($scope.user_id) // this works 

        });

  console.log($scope.user_id);  // <--- Here i'm getting undefined. 

3 个答案:

答案 0 :(得分:0)

在回调函数中对范围使用$ apply()。

API.getUser($scope.email, $scope.password).then(function(data) {
            $scope.user_id = (data.id);
            $scope.$apply(); // <----- Here
            console.log($scope.user_id) 

        });

答案 1 :(得分:0)

对API.getUser的调用是一个异步调用,下面的代码在回调执行之前执行。这就是$ scope.user_id未定义的原因。您可以对成功回调中的变量执行任何操作,并在需要使用此user_id进行更多操作时将其传递给函数。

答案 2 :(得分:0)

嗯,问题在于asyncs操作的Javascript行为和Promises($ q)的使用,当解释器运行代码时,执行如下操作:

1)发出这个ajax请求(异步操作),并返回一个Promise

API.getUser($scope.email, $scope.password)

2)在Promise中注册函数,在操作结束时执行

  .then(function(data) {
     $scope.user_id = (data.id);
     console.log($scope.user_id) // this works 
   });

3)打印$ scope.user_id

的当前值
console.log($scope.user_id);

打印未定义,因为此时异步操作尚未完成

4)有时,Async操作完成并执行此代码

$scope.user_id = (data.id);
console.log($scope.user_id) // this works 

在最后一部分中设置了$ scope.user_id,并且console.log打印了正确的值。