我一直以为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。
希望能帮助到你。

