ng-repeat过滤器是空循环

时间:2015-10-15 15:58:07

标签: javascript angularjs angularjs-ng-repeat

我执行以下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

2 个答案:

答案 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)

看起来您在错误的地方valueseinshaetzungen.alldata

您希望将筛选后的列表分配给值,然后迭代它。

<div ng-repeat="einschItem in values = (einschaetzungen.alldata| filter: { savedatum: lolatage[tagarrayindex].tagestring } | orderBy : '-savetimestamp')">

{{values.length}}

Here is a similar example

此版本适用于较旧版本的角度。对于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}}