我一直以为ngShow
和ngHide
互相充当 bool(boolean) 对象。但是,当涉及到空数组时,ngShow
的意外行为会撼动这一信念。
这是一个demo plunker。为什么ng-show="!emptyArray"
的行为不像ng-hide="emptyArray"
?
最佳答案
因为[] !== false
。您可以将长度值强制改为boolean
,而不是!!
。
<div ng-hide="!!emptyArray.length">emptyArray is falsy, so do not hide this.</div>
<div ng-show="!!!emptyArray.length">!emptyArray is truthy, so show this.</div>
编辑:
AngularJS的指令
hide
或show
取决于函数toBoolean()
来评估传入的值。这是toBoolean()的源代码:function toBoolean(value) {
if (value && value.length !== 0) {
var v = lowercase("" + value);
value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]');
} else {
value = false;
}
return value;
}
您可以在JS控制台中验证以下代码:
>var emptyArray = [];
>toBoolean(emptyArray)
false
>toBoolean(!emptyArray)
false
这就解释了为什么。由于将
emptyArray
直接传递到toBoolean()
时,它将评估正确的结果false
。但是,当!emptyArray
传递给toBoolean()
时,由于true
本身就是!emptyArray
,因此它的计算结果不等于false
。希望能帮助到你。
关于angularjs - 为什么我从ng-show =“!emptyArray”和ng-hide =“emptyArray”得到不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19035406/