我知道这是绝对愚蠢的事,但我很好奇 有没有办法像:
<div ng-show='this.children.length > 0'> // shown
<div>
</div>
</div>
答案 0 :(得分:62)
要添加@Josh David Miller答案,以下值将被视为角度假。
1)空数组
2)空字符串//甚至空格都被认为是真的
3)带有false
的布尔值4)未定义
5)空
6)0
所以,大卫的回答可以写成,
<div ng-show="items.length">
<div ng-repeat="item in items">
<!-- ... -->
</div>
</div>
甚至更短,
<div ng-show="items">
<div ng-repeat="item in items">
<!-- ... -->
</div>
</div>
答案 1 :(得分:31)
不幸的是,rajkamals的回答不再正确。
从这个版本开始,只有这6个值被认为是假的:
false
null
undefined
NaN
0
""
值'f'
,'0'
,'false'
,'no'
,'n'
和[]
(!)变得真实。
所以使用
<div ng-show="items">
<!-- ... --->
</div>
如果只有items
包含至少1个元素才能显示div,则不再推荐,因为即使items = []
它也会显示。
答案 2 :(得分:17)
在AngularJS中,我们不应该根据我们的观点来考虑,而应该考虑我们的模型。
所以你应该问问自己在元素中生成内容的原因。如果它是动态的,它来自你的模型。那么您可以访问哪种模型属性来为您提供所需的信息?
这是一个ngRepeat示例:
<div ng-show="items.length > 0">
<div ng-repeat="item in items">
<!-- ... -->
</div>
</div>
答案 3 :(得分:4)
看到你的大多数问题,看起来要么你没有以正确的方式使用Angular,要么你可能无法(因为项目限制可能!)。
一些需要考虑的一般事项。
如果您使用的是$ compile - 这是代码味道。在95%的情况下,您不需要使用$ compile。如果你使用$ compile,你就会意识到它并且你找不到任何其他方法来做你需要做的事情。你非常谨慎地使用它。
如果你“查询”DOM做任何事情 - 再一次它可能有气味。再次在95%的情况下你不需要这样做。这里正确的方法是修改模型,让Angular处理DOM。
这些应该使用与使用setTimeout 0相同的方式。每当你使用它时,它应该感觉像一个黑客。
如果你没有完全(或至少部分)控制你的HTML(服务器可能是?),它可能会让Angular变得混乱。也许这就是为什么你试图做所有这些DOM操作的东西。
<div ng-show='this.children.length > 0'> // shown
<div>
</div>
</div>
这是我们不确定谁控制的一个例子。如果您可以访问生成此html的构造,您也可以使用ng-init!
编写它<div ng-init="childElements = {{serverside variable}}" ng-show='childElements > 0'> // shown
<div server-side-repeat>
</div>
</div>
如果你被迫在很多地方做这些事情,那么也许Angular对你来说不是正确的解决方案?
答案 4 :(得分:0)
AngularJS v1.3.3 =&gt; ng-show="items"
对我不起作用,因为它评估对象true,false,null,undefined。在items=[]
的情况下,ng-show仍然评估为true。相反,我不得不使用:
<div ng-show="items.length">
<!-- ... --->
</div>
并且工作!!谢谢你的指导。
答案 5 :(得分:0)
这也很完美......
<div ng-show="items.length">
<div ng-repeat="item in items">
<!-- bind to your Dom element -->
</div>
</div>
答案 6 :(得分:0)
正如克里斯托弗指出的那样,接受的答案已不再正确。因为空数组仍然评估为真实。
obj.children = []
<div ng-show='obj.children'>
As of Angular 1.3 this always shows if children exists as part of obj.
</div>
在这种情况下,数组存在。但是如果你给出要计算的数组数组的零元素的角度,并且没有这样的元素,它将被评估为false。
<div ng-show='obj.children[0]'>
This will not show because there is no element in the array at 0
</div>
您也可以使用[n]作为数组中的任何编号元素,仅在计数大于n时显示。 如果使用obj.children [2],它只会显示数组中是否有3个或更多元素。