我刚刚遇到了一个奇怪的“怪癖”,我不确定我是否做错了什么。
这是代码,下面有一个 Plunkr 链接:
HTML
<!-- Shows nothing if bar === 'N', BUT shows any other letter. -->
<div ng-if="foo.bar">ng-if: {{ foo.bar }}</div>
<!-- Shows nothing is bar === 'N', BUT shows any other letter. -->
<div ng-show="foo.bar">ng-show: {{ foo.bar }}</div>
<!-- Works in all cases -->
<div ng-hide="!foo.bar">ng-hide: {{ foo.bar }}</div>
<button ng-click="foo.select('B')">Select 'B'</button>
<button ng-click="foo.select('N')">Select 'N'</button>
<button ng-click="foo.reset()">Reset</button>
JavaScript
angular.module('app', [])
.controller('MainController', function($scope) {
$scope.foo = {
baz: 'foo'
};
$scope.foo.select = function(item) {
$scope.foo.bar = item;
}
$scope.foo.reset = function() {
$scope.foo.bar = '';
}
});
Plunkr:http://plnkr.co/edit/H3Ghk1dCQqQ5PVd30Pdp?p=preview
在示例中,为什么当您选择“N”时它没有显示?在我实际的应用程序中,它使用了整个字母表,只有字母“N”不起作用。这对我来说没有任何意义,在纯 JavaScript 中,以下内容适用:
var obj = {};
obj.foo = {};
obj.foo.bar = 'N';
!!obj.foo.bar
// => true
而且我假设 ng-if/ng-show
显示的内容基于表达式是“真实的”?
任何帮助都会很棒,我希望这只是我造成的误会!
最佳答案
信不信由你,这实际上是一个功能。更准确地说,它是一项功能,因为它已从 1.3.0 测试版中删除。
这是 commit删除它。提交消息指出:
values
'f'
,'0'
,'false'
,'no'
,'n'
,'[]'
are no longer treated as falsy. Only JavaScript falsy values are now treated as falsy by the expression parser; there are six of them:false
,null
,undefined
,NaN
,0
and""
.
关于javascript - ng-if 表达式评估不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25058832/