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

问题描述 投票:0回答:1

在父作用域(包装整个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>那样显示真/假,它也正常工作。

在一个控制器中,我想在控制器中使用此布尔值而不是在视图中。所以我做if($scope.authentication.isAuth){if($scope.$parent.authentication.isAuth){(我试过两个),这个条件转到其他甚至当<p>{{$parent.authentication.isAuth}}</p>鉴于我使用此条件的控制器显示为true。

所以

<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假和“假”字符串。

angularjs scope parent
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.