2015-12-31 36 views
0

我有这个控制器用于保存个人的一些细节。我有一个单独的存储库EntityRepository,其中定义了一个从数据库获取用户性别的函数。

函数响应工作正常,当我在函数响应中的控制台上打印性别时,它工作(console.log(“inside:”,$ scope.userGender);)。

但价值不未定义我正在之外的功能(执行console.log(“外”,$ scope.userGender);)

.controller('individualDetailsCtrl', function($scope, $rootScope, $location, EntityRepository) { 
$scope.userGender = ""; 
$scope.entity = { 
    name: "", 
    gender: $scope.userGender, 
    dob: "", 
    pan: "" 
}; 
EntityRepository.getUserGender() 
.then(function(response){ 
    $scope.userGender = response.data.gender; 
    console.log("inside : ", $scope.userGender); 
}) 
.catch(function(errorResponse) { 
    $scope.error = errorResponse.data 
}); 
console.log("outside : ", $scope.userGender); 
}); 

我想保存在响应中的性别$ scope.entity.gender,但我无法访问函数作用域之外的$ scope.userGender的值。

由于$ scope在控制器的范围内定义,我认为它应该能够访问函数响应之外的值。

回答

1

在AJAX成功回调之外,您无法访问$scope.userGender的值的原因很简单:AJAX是异步的,这意味着只有在此AJAX调用成功后才会分配此变量的值。您应该调整您的代码,使其在此AJAX调用成功之前不依赖于$scope.userGender的值。如果这个值是绑定到标记中的某个控件的数据,那么这不是问题,当从服务器检索到该值时,该值会稍微延迟一点。

+0

所以我怎么能改正它。 –

+0

你想纠正什么?你的代码没有问题。这就是AJAX的工作原理。在AJAX成功回调中使用'$ scope.userGender'变量,而不是在其外部。调整您的代码,使其可以使用回调函数工作。 –

0

由于异步请求的属性,您无法访问外部值。简单的说就是这个声明:console.log("outside : ", $scope.userGender);,在.then(function(){ ... })之前执行。

修正:

  1. 包裹内的$timeout

.controller('individualDetailsCtrl', function($scope, $rootScope, $location, EntityRepository, $timeout) {

$timeout(function() {console.log("outside : ", $scope.userGender)});

您的外码
  • 仅在.then(function() { })内使用$scope.userGender的值。
  • 0

    你可以试试这个。

    $scope.GetUserGender = function(){ 
    EntityRepository.getUserGender().then(function(response){ 
        $scope.userGender = response.data.gender; 
        console.log("inside : ", $scope.userGender); 
        }).catch(function(errorResponse) { 
        $scope.error = errorResponse.data 
        });  
    } 
        $scope.GetUserGender(); // 
    
    console.log("outside : ", $scope.userGender); 
    

    希望这将工作:)

    相关问题