Angularjs ng show的奇数问题始终评估为真

Angularjs ng show的奇数问题始终评估为真,angularjs,Angularjs,在我看来,有一些代码只有在特定值为真时才会出现。看起来是这样的: button type="button" ng-click="attachBarCode('enter')" ng-show="barcodeAllowed.status">Foo</button> 直到最近,这种方法才奏效。我的控制器有一些逻辑,基于Ajax数据,它将$scope.barcodeAllowed.status设置为true。突然之间,按钮总是出现。为了帮助调试该问题,我在视图中添加了一些附加测试

在我看来,有一些代码只有在特定值为真时才会出现。看起来是这样的:

button type="button" ng-click="attachBarCode('enter')" ng-show="barcodeAllowed.status">Foo</button>
直到最近,这种方法才奏效。我的控制器有一些逻辑,基于Ajax数据,它将$scope.barcodeAllowed.status设置为true。突然之间,按钮总是出现。为了帮助调试该问题,我在视图中添加了一些附加测试:

    first test, <span ng-show="!barcodeAllowed.status">DONT SHOW</span><br/>
    second test, <span ng-show="barcodeAllowed.status">DONT SHOW</span><br/>
    test -{{barcodeAllowed.status}}-end -{{!barcodeAllowed.status}}- -{{barcodeAllowed | json}}-<br/>
    test if <span ng-if="barcodeAllowed.status"> if was true</span><p>
这就是事情变得疯狂的地方。在我看来,这两种方法都不可行,尽管这似乎是不可能的。当我在第三行中输出值时,我看到了false和true,正如我所期望的那样

最后-如果是ng?它工作得很好!该值没有显示


我听说有人提到ngShow在ngif中可能存在作用域问题,但我的代码不在ngif中。

Ng show/Ng hide指令需要一个css类来显示/隐藏,因为当作用域变量为truthy/falsy时,它只会向元素添加一个类


参考:所以,你不会相信它是什么。我在我的应用程序中使用了内容安全策略,一时兴起,我禁用了它。我一这么做,它就开始工作了。我玩了一会儿,发现我需要将“不安全评估”添加到CSP的脚本src区域中,以便Angular能够应用样式。

您是否尝试过在视图中尝试console.log scope.barcodeAllowed.status或{barcodeAllowed.status}之类的操作,以查看发生这种情况时它设置为什么?我以前见过类似的东西。在我的控制器中,我在if之前和之后检查它。如果我检查在inspector中看到的DOM,我可能会尝试在视图中编写变量,只是为了确保它被正确绑定,而不是针对不同的scopeQuery。Angular并没有因为任何原因删除它,这是一个问题吗?嗯,show/hide指令和if指令之间的主要区别是show/hide将把它保存在DOM中,只是隐藏它,ng if不会并将触发重新渲染。它添加了一个类并使用css,但您不必自己定义这个类。然而,它可能是一个更具体的css规则时!重要信息的使用可能会在添加ng hide规则时覆盖该规则。对于好奇的人,我在这里详细介绍了这一点: