我一直认为ngShow
并ngHide
充当彼此的布尔对应物。ngShow
但是,当涉及空数组时,这种意外行为会动摇这种信念。
这是一个演示 plunker。为什么不ng-show="!emptyArray"
表现得像ng-hide="emptyArray"
?
我一直认为ngShow
并ngHide
充当彼此的布尔对应物。ngShow
但是,当涉及空数组时,这种意外行为会动摇这种信念。
这是一个演示 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
这就解释了为什么。由于 when直接emptyArray
传递给toBoolean()
,它评估正确的结果false
。但是,当!emptyArray
传递给时toBoolean()
,它不会评估为,true
因为!emptyArray
它false
本身。
希望能帮助到你。
ng-if 和 ng-show 虐待“[]”(空数组)
见:这个链接
[] == true
false
[] != true
true
(![]) == true
false
[''] == true
false
(!['']) == true
false
"" == true
false
"[]" == true
false
(!"[]") == true
false
听起来是设计使然。
I use something like this , it works to me
ng-hide="array.length == 0"