2017-12-21 6 views
0

trueを返す場合は、htmlコードで関数Allow()を呼び出しています。ユーザーはデータを編集できます。Angular JSのリモートデータから変数を設定する

機能$scope.GetCurrentStatus(),$scope.GetCurrentStatus()はどちらも同期しています。

しかし、Allow()メソッドでは、次のエラーを返します。

Type Error: Cannot read property 'UserType' of undefined 

状況に対応してください。

//LoadStatus 
$scope.GetCurrentStatus = function() { 
    var defer = $q.defer(); 
    $http({ 
     method: "POST", 
     url: "../Documentation/Documentation.aspx/GetStatus", 
     data: {} 
    }) 
    .then(function (response) { 
     defer.resolve(response.data.d); 
     $scope.Status = response.data.d; 
    }), 
    function (error) { data, status }; 
} 

$scope.GetCurrentStatus(); 

//Load AccessRole 
$scope.GetAccessRole = function() { 
    var defer = $q.defer(); 
    $http({ 
     method: "POST", 
     url: "../Documentation/Documentation.aspx/GetAccessRole", 
     data: {} 
    }) 
    .then(function (response) { 
     defer.resolve(response.data.d); 
     $scope.Access = response.data.d; 
    }), 
    function (error) { data, status }; 
}; 

$scope.GetAccessRole(); 

$scope.Allow = function() { 
    if ($scope.Access.UserType == 'Admin' || !($scope.Status.Status == 'CC' || $scope.Status.Status == 'CD')) 
     return true; 
    return false; 
} 
+0

関数GetAccessRole()は、必要なデータを返しますか? console.log($ scope.Access)をそこに保存してください。 –

+0

'GetCurrentStatus'と' GetAccessRole'はどのように同期できますか?あなたはそれらを非同期にした約束を使用しています。あなたが 'Allow()'を呼び出すまでには、あなたの応答は得られません。 – Ashish

+0

はいGetAccessRole()はデータを返します。しかし、$ scope.Allow()はGetAccessRole()がデータを返す前に実行されます。 –

答えて

0

あなたが原因の非同期呼び出しに任意の値で設定された実際の$scope.Access変数を設定する前$scope.Allowを使用しているので、これが起こっています。 だから、あなたが成功を延期または$scope.Allow方法

$scope.Access = {}; 
    $scope.Status = {}; 
    $scope.GetCurrentStatus() = function(){ 
     return $http.get('http://UR_URL'); 
    }); 
    $scope.GetAccessRole = function(){ 
     return $http.get('http://UR_URL'); 
    }); 

を呼び出す前に$scope.access$scope.statusを設定し、

$scope.GetCurrentStatus().then(function(response){ 
    $scope.Status = response.data.d; 
}); 
$scope.GetAccessRole().then(function(response){ 
    $scope.Access = response.data.d; 
}); 

として使用内部$scope.Allowメソッドを呼び出した後、$scope.Allowメソッドを呼び出すことができます

2

$scope.GetCurrentStatus()機能が、と$scope.GetCurrentStatus()は同期フェーズで呼び出されますが、それらには非同期コードがいくつかあります。

変数$scope.Access$scope.Statusは、これらの非同期メソッド内でのみ作成されます。したがって、スコープ変数を設定するまでネットワーク応答を待つ時間がかかります。

回避策の1つは、$scope.Access$scope.Statusをコントローラのどこかに記載することです。

$scope.Access = {}; 
$scope.Status = {}; 
+1

ありがとう、それは働いた –

関連する問題