AngularJS中布尔表达式的求值
Evaluation of boolean expressions in AngularJS
我正在测试ng-show
和AngularJS表达式,但我发现了一些我无法理解的东西。我创建了一个变量displayed
,并分配了一个字符串'false'
(不是布尔)给它。表达式displayed && true
被求值为true,并且显示第二个div没有问题(因为字符串和true都应该为真)。我知道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';
});
这就是angular如何计算字符串'false'
和'f'
以及其他一些字符串的。有一个公开的bug。
如果您在ng-show或ng-hide中使用字符串变量,则可以检查变量,如下面所示:
模板:
<div ng-controller="MyCtrl">
<div ng-show="displayed != null">test1</div>
<div ng-show="displayed == 'false'">test2</div>
</div>
控制器:
var myApp = angular.module('myApp', []);
myApp.controller('MyCtrl', function ($scope, $parse) {
$scope.displayed = 'false';
});
现在两个div将正确显示
如果你在ng-show或ng-hide中使用布尔变量意味着你可以像下面这样检查变量:
模板:
<div ng-controller="MyCtrl">
<div ng-show="displayed">test1</div>
<div ng-show="!displayed">test2</div>
</div>
控制器:
var myApp = angular.module('myApp', []);
myApp.controller('MyCtrl', function ($scope, $parse) {
$scope.displayed = false;
});
对于上述布尔条件,第一个div将不显示,第二个div将显示。
在这里,我直接将字符串作为属性值传递给ng-show指令,因为根据javaScript的typeConversion,它应该评估为true,但这并没有发生在这里,字符串值(结果为false),尽管它对数值很好。
所以这是在angularJs中计算布尔表达式的一个错误。
My Code:
<div ng-controller="myController">
<input type="text" ng-model="name">
<p>{{name}}</p>
<p>{{10+10}}</p>
<button type="button" ng-click="myFunction(this)">click Me !!</button>
<p ng-show="rabbit">The name is {{ name | uppercase }}</p>
</div>
相关文章:
- 使用正则表达式angularjs验证文件路径
- 布尔表达式-与AND、OR逻辑运算符混淆以及它们的工作方式
- 什么's VBA和Javascript布尔表达式之间的区别
- 评估JavaScript中给出布尔表达式的字符串
- 从树遍历中构建布尔表达式的算法
- = vs === 布尔表达式的运算符
- ngAnimateSwap-使用布尔表达式不会按预期设置动画
- 为什么这个布尔表达式不返回 true
- 如何在复杂的布尔表达式上避免三元
- 用pegjs解析布尔表达式链
- 反转布尔表达式
- 在不带eval的Javascript中计算字符串中的布尔表达式
- 为什么这个JavaScript代码在布尔表达式不再为true之后进入for循环
- 遍历json抽象语法树来构建布尔表达式
- JavaScript布尔表达式中的多个比较运算符
- javascript在布尔表达式中使用优化吗?
- 表达式angularjs中的组合属性
- 是Chrome Javascript评估布尔表达式正确
- 用于布尔表达式计算的Javascript eval
- AngularJS中布尔表达式的求值