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

时间:2017-12-25 13:36:28

标签: angularjs scope parent

在父作用域(包装整个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,如<p>{{$parent.authentication.isAuth}}</p>,它也正常工作。

在一个控制器中,我想在控制器内使用此布尔值而不是在视图中。所以我做if($scope.authentication.isAuth){if($scope.$parent.authentication.isAuth){(我试过两个),即使在我使用此条件的控制器<p>{{$parent.authentication.isAuth}}</p>显示为真时,这个条件也会转到其他地方。

所以它

<div ng-controller="ctrl">
    <p>{{$parent.authentication.isAuth}}</p>
</div>

在段落中显示 true ,在名为ctrl的控制器中显示此条件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”字符串。

1 个答案:

答案 0 :(得分:1)

当您设置值async($localForage.getItem('authorization').then ...)时,它将首先false,然后在异步操作完成后将其设置为true。您的视图会相应地更新值 - 每当它发生变化时 - 这就是你说它在视图中显示true的原因。它将首先false,并在几毫秒后变为true。你不一定会看到它,但它仍然发生。console.log在异步更改发生之前运行,并且由于if > else只运行一次,它只会在变量设置为{{1}之前记录变量的状态}}