视图中的布尔值为true,但控制器中的布尔值为false angularJS
在父作用域(包装整个webapp的外部作用域)中,如果您登录,我定义布尔变量视图中的布尔值为true,但控制器中的布尔值为false angularJS,angularjs,scope,parent,Angularjs,Scope,Parent,在父作用域(包装整个webapp的外部作用域)中,如果您登录,我定义布尔变量 $localForage.getItem('authorization') .then(function(authData) { if(authData) { $scope.authentication.isAuth = true; //token is added in http interceptor
$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。我还可以在视图中显示true/false,如so{{{$parent.authentication.isAuth}}
,并且它工作正常
在一个控制器中,我想在不在视图中的控制器内部使用此布尔值。所以我做了if($scope.authentication.isAuth){
或者if($scope.parent.authentication.isAuth){
(我两个都试过了),即使在我使用这个条件的控制器视图中{$parent.authentication.isAuth}}
显示为true时,这个条件也会转到else
所以
当您设置值async(
$localfour.getItem('authorization')。然后…)时
,它将首先是false
,然后它可能会在异步操作完成后被设置为true
。您的视图会相应地更新该值-每次更改-这就是为什么您说它在视图中显示true
。它将首先是false
,几毫秒后将更改为true
。您不必看到这一点,但它仍然会发生。控制台.log
会在异步更改发生之前运行,并且由于if>else
只运行一次,因此它只会记录变量在设置为true
之前的状态。它是否真的与其他变量中的代码有关?好的。我编辑。您正在打印两个条件中的值相同,您如何说它会转到else部分?因为它控制台输出false而不是True我尝试了它,现在它正在控制台输出false和“false”字符串,请查看.console.log(typeof$scope.authentication.isAuth);返回布尔值。在此场景中,$watch for boolean更改不会影响我的应用程序性能?
<div ng-controller="ctrl">
<p>{{$parent.authentication.isAuth}}</p>
</div>
if($scope.authentication.isAuth){
console.log($scope.authentication.isAuth);
console.log('true');
} else {
console.log($scope.authentication.isAuth);
console.log('false');
}