我在html代码中调用函数Allow()
,如果返回true
,则允许用户编辑数据。
函数$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 :(得分:2)
虽然函数$scope.GetCurrentStatus()
和$scope.GetCurrentStatus()
在同步fasion中被调用,但它们中有一些异步代码。
不幸的是,您的变量$scope.Access
和$scope.Status
仅在这些异步方法中创建。因此,在设置范围变量之前,需要等待一些网络响应。
一种解决方法是在控制器的某个上方声明$scope.Access
和$scope.Status
。
$scope.Access = {};
$scope.Status = {};
答案 1 :(得分:0)
这种情况正在发生,因为您在设置由异步调用引起的任何值设置的实际$scope.Allow
变量之前使用$scope.Access
。
因此,您可以在推迟成功之前调用$scope.Allow
方法,或在调用$scope.access
方法之前设置$scope.status
和$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.GetCurrentStatus().then(function(response){
$scope.Status = response.data.d;
});
$scope.GetAccessRole().then(function(response){
$scope.Access = response.data.d;
});
然后调用$scope.Allow
方法