我只是遇到一个奇怪的怪癖,而且我不确定我是否做错了。
这是代码,下面是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&#39; N&#39;它没有显示?在我的实际应用中,它使用的是整个字母,只有字母“N&#39;不起作用。这对我来说没有任何意义,在纯JavaScript中,以下内容适用:
var obj = {};
obj.foo = {};
obj.foo.bar = 'N';
!!obj.foo.bar
// => true
我假设ng-if / ng-show
显示的内容基于表达式&#39; truthy&#39;?
任何帮助都会令人惊叹,我希望这只是我所做出的误解!
答案 0 :(得分:6)
信不信由这实际上是一个特征。更准确地说,这是一个功能,因为它已从1.3.0测试版中删除。
以下是删除它的commit。提交消息指出:
值
'f'
,'0'
,'false'
,'no'
,'n'
,'[]'
不再 被视为虚假的。现在只有JavaScript假值被视为假的 表达式解析器;其中有六个:false
,null
,undefined
,NaN
,0
和""
。