布尔值在视图中为真但在控制器中为假 angularJS
Boolean in view is true but in controller false angularJS
在父作用域(包裹整个 webapp 的外部作用域)中,如果您已登录,我会定义布尔变量。
$localForage.getItem('authorization')
.then(function(authData) {
if(authData) {
$scope.authentication.isAuth = true;
//token is added in http interceptor
} else {
$scope.authentication.isAuth = false;
}
}, function(){
console.log("error with getting authorization localForage after refresh");
}
);
它基本上工作正常。现在,我可以使用 ng-if="$parent.authentication.isAuth"
基于此布尔值构建 UI。我也可以在视图中像 <p>{{$parent.authentication.isAuth}}</p>
那样显示 true/false,它也可以正常工作。
在一个控制器中,我想在不在视图中的控制器内部使用这个布尔值。所以我做 if($scope.authentication.isAuth){
或 if($scope.$parent.authentication.isAuth){
(我都试过了)并且即使 <p>{{$parent.authentication.isAuth}}</p>
鉴于我正在使用此条件的控制器显示为真,此条件也会转到 else。
原来如此
<div ng-controller="ctrl">
<p>{{$parent.authentication.isAuth}}</p>
</div>
在名为 ctrl
的段落和控制器中显示 true 这种情况 if($scope.authentication.isAuth){
转到其他...为什么会有这种奇怪的行为?
if($scope.authentication.isAuth){
console.log($scope.authentication.isAuth);
console.log('true');
} else {
console.log($scope.authentication.isAuth);
console.log('false');
}
它 console.log
false 和 "false" 字符串。
当您设置值 async ($localForage.getItem('authorization').then ...)
时,它将首先设置为 false
,然后可能会在异步操作完成后设置为 true
。您的视图会更新相应的值 - 每次它改变 - 这就是为什么你说它在视图中显示 true
。它将首先显示 false
,几毫秒后将变为 true
。你不不一定会看到,但它仍然会发生。console.log
在异步更改发生之前是 运行,并且由于 if > else
仅 运行 一次,它只会记录变量设置为 true
.
之前的状态
在父作用域(包裹整个 webapp 的外部作用域)中,如果您已登录,我会定义布尔变量。
$localForage.getItem('authorization')
.then(function(authData) {
if(authData) {
$scope.authentication.isAuth = true;
//token is added in http interceptor
} else {
$scope.authentication.isAuth = false;
}
}, function(){
console.log("error with getting authorization localForage after refresh");
}
);
它基本上工作正常。现在,我可以使用 ng-if="$parent.authentication.isAuth"
基于此布尔值构建 UI。我也可以在视图中像 <p>{{$parent.authentication.isAuth}}</p>
那样显示 true/false,它也可以正常工作。
在一个控制器中,我想在不在视图中的控制器内部使用这个布尔值。所以我做 if($scope.authentication.isAuth){
或 if($scope.$parent.authentication.isAuth){
(我都试过了)并且即使 <p>{{$parent.authentication.isAuth}}</p>
鉴于我正在使用此条件的控制器显示为真,此条件也会转到 else。
原来如此
<div ng-controller="ctrl">
<p>{{$parent.authentication.isAuth}}</p>
</div>
在名为 ctrl
的段落和控制器中显示 true 这种情况 if($scope.authentication.isAuth){
转到其他...为什么会有这种奇怪的行为?
if($scope.authentication.isAuth){
console.log($scope.authentication.isAuth);
console.log('true');
} else {
console.log($scope.authentication.isAuth);
console.log('false');
}
它 console.log
false 和 "false" 字符串。
当您设置值 async ($localForage.getItem('authorization').then ...)
时,它将首先设置为 false
,然后可能会在异步操作完成后设置为 true
。您的视图会更新相应的值 - 每次它改变 - 这就是为什么你说它在视图中显示 true
。它将首先显示 false
,几毫秒后将变为 true
。你不不一定会看到,但它仍然会发生。console.log
在异步更改发生之前是 运行,并且由于 if > else
仅 运行 一次,它只会记录变量设置为 true
.