视图中的布尔值为true,但控制器中的布尔值为false angularJS

视图中的布尔值为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

在父作用域(包装整个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。我还可以在视图中显示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');
}