我执行以下ng-repeat循环,效果很好!
<div ng-repeat="einschItem in einschaetzungen.alldata | filter: { savedatum: lolatage[tagarrayindex].tagestring } | orderBy : '-savetimestamp'">
现在我想检查过滤是否为空,所以我搜索并找到了解决我的问题的方法。
<div ng-repeat="einschItem in einschaetzungen.alldata = (values | filter: { savedatum: lolatage[tagarrayindex].tagestring } | orderBy : '-savetimestamp')">
{{values.length}}
但是如果使用这个代码我再也不会在循环中获得任何结果,那么&#34; einschItem&#34;是空的。
谢谢!
我使用angular v1.4.6
答案 0 :(得分:3)
您可能想要的是对重复的结果进行别名。来自Angular Documentation:
variable in expression as alias_expression
- 您还可以提供一个可选的别名表达式,然后在应用过滤器后存储转发器的中间结果。通常,这用于在转发器上的筛选器处于活动状态时呈现特殊消息,但筛选结果集为空。例如:
item in items | filter:x as results
会将重复项目的片段存储为结果,但只有在通过过滤器处理完项目后才会存储。请注意
as [variable name]
不是运算符,而是ngRepeat微语法的一部分,因此它只能在结尾处使用(而不是作为运算符,在表达式中)。例如:
item in items | filter : x | orderBy : order | limitTo : limit as results
。
所以在你的情况下,你可以使用:
<div ng-repeat="einschItem in einschaetzungen.alldata |
filter: { savedatum: lolatage[tagarrayindex].tagestring } |
orderBy : '-savetimestamp'
as filteredItems">
{{filteredItems.length}}
请注意,这在功能上与问题的其他答案中提供的语法相同;这只是ngRepeat微语法提供的替代方案。
答案 1 :(得分:1)
看起来您在错误的地方values
和einshaetzungen.alldata
您希望将筛选后的列表分配给值,然后迭代它。
<div ng-repeat="einschItem in values = (einschaetzungen.alldata| filter: { savedatum: lolatage[tagarrayindex].tagestring } | orderBy : '-savetimestamp')">
{{values.length}}
此版本适用于较旧版本的角度。对于v1.3.17-beta +,您可以使用Claies answer中提到的alias
格式。
<div ng-repeat="einschItem in einschaetzungen.alldata |
filter: { savedatum: lolatage[tagarrayindex].tagestring } |
orderBy : '-savetimestamp'
as filteredItems">
{{filteredItems.length}}