【发布时间】:2015-08-03 05:28:18
【问题描述】:
我正在测试 ng-show 和 AngularJS 表达式,但我发现了一些我无法理解的东西。我创建了一个变量displayed 并为其分配了一个字符串'false'(不是布尔值)。表达式displayed && true 被评估为真,第二个 div 显示没有问题(因为字符串和真应该为真)。我知道 Angular 表达式和 JavaScript 表达式之间存在一些差异,但是我不知道为什么第一个 div 没有显示;似乎 displayed 被 Angular 编译为布尔值。
这里是 jsfiddle:http://jsfiddle.net/micmia/1psf70tv/3/
模板:
<div ng-controller="MyCtrl">
<div ng-show="displayed">test1</div>
<div ng-show="displayed && true">test2</div>
</div>
控制器:
var myApp = angular.module('myApp', []);
myApp.controller('MyCtrl', function ($scope, $parse) {
$scope.displayed = 'false';
});
【问题讨论】:
-
通常使用 {{displayed}} 或 {{expression}} 来调试表达式会很有帮助。
-
<div ng-show="!!displayed">test1</div>行为正常吗? -
@Davin Tryon - 是的,我刚刚尝试过,它确实有效。超级诡异。我想问题是,为什么将其设置为
"false"而不是true?顺便说一句,这似乎只适用于字符串 "false" 。 . .如果您在小提琴中将其更改为“香蕉”,它就可以正常工作。 -
if(string)将是真实的,除非字符串为空。这相当于您使用ng-show所做的事情,而使用"false"只是一个字符串 -
@carton 'false' != false 。 . .在你的控制台中运行
Boolean('false'),你会发现它应该是真的。
标签: javascript angularjs