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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了视图中的布尔值为true,但在控制器中为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>那样显示真/假,它也正常工作。

在一个控制器中,我想在控制器中使用此布尔值而不是在视图中。所以我做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假和“假”字符串。

答案

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

以上是关于视图中的布尔值为true,但在控制器中为false angularJS的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中布尔值为false的几种情况

在Python中什么样的对象布尔(bool)值为False,什么样的对象布尔(bool)值为True可以用内置函数bool()判断对象的布尔值

查找值为真的布尔数组的索引

c++如何定义布尔型数组使其初始值为true?

将 Mathematica 值列表转换为布尔列表

0095 布尔型BooleanUndefined和 Null