当前位置: 首页 > 面试题库 >

为什么从ng-show =“!emptyArray”和ng-hide =“ emptyArray”得到不同的结果?

蒙经纶
2023-03-14
问题内容

我一直都在思考ngShowngHide互相扮演布尔对象。但是,这种想法ngShow被涉及空数组时的意外行为所动摇。

这是一个演示小品。为什么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的指令hideshow取决于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,因为!emptyArrayfalse自己。

希望能帮助到你。



 类似资料:
  • 问题内容: 我试图了解和/ 之间的区别,但对我来说它们看起来相同。 我应该记住使用一个或另一个来区别吗? 问题答案: ngIf 该指令根据表达式 删除或重新创建 DOM树的一部分。如果赋值为的表达式的计算结果为假值,则将元素从DOM中删除,否则将元素的克隆重新插入DOM中。 删除元素时,使用它的作用域将被销毁,并在恢复该元素时创建一个新的作用域。在内部创建的作用域使用原型继承从其父作用域继承。 如

  • 问题内容: 我了解这一点,并会影响在元素上设置的类,并控制是否将元素呈现为DOM的一部分。 有没有对选择的准则在/ 或反之亦然? 问题答案: 取决于您的用例,但总结不同之处: 将从DOM中删除元素。这意味着您所有的处理程序或所有附加到这些元素的内容都将丢失。例如,如果将单击处理程序绑定到子元素之一,则将其评估为false时,将从DOM中删除该元素,并且即使稍后将其评估为true并显示该元素,您的单

  • 我试图理解ng if和ng show之间的区别,但在我看来它们是一样的。 选择使用其中一种或另一种有什么区别吗?

  • 本文向大家介绍angular中ng一if和ng-show/hide 有什么区别?相关面试题,主要包含被问及angular中ng一if和ng-show/hide 有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 1.ng一if 在后面表达式为 true 的时候才创建这个 dom 节点,ng一show 是初始时就创建了,用 display:block 和 display:none 来控制显示和不

  • 问题内容: 我是AngularJS的新手,所以对于我的问题可能有一个简单的解决方案。我一直在处理这种形式。我有两个输入- 一个用于门的数量,一个用于窗户的数量。然后,我要显示几个div,如果它们满足一定数量的门窗总数。当我在输入中输入数字时,ng-show解析为“ true”。但是该元素上仍然具有“ ng-hide”类,因此仍将其隐藏。 这是我的代码示例: 这是我输入3门和4窗口时的输出: 问题答

  • 我知道和会影响元素上的类集,并且控制元素是否呈现为DOM的一部分。 是否有关于选择ng(如果)而不是ng(显示)或ng(隐藏)的指南?