2015-12-31 40 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); 
    

    希望這將工作:)

    相關問題