Ng-repeat滤波器为空回路

ng-repeat filter is empty loop

本文关键字:回路 滤波器 Ng-repeat      更新时间:2023-09-26

我执行了下面的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}}

但是如果使用这段代码,我在循环中不再得到任何结果,"einschItem"列表为空。

谢谢!

可能在这里想要的是对repeat的结果进行别名。来自Angular文档:

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微语法提供的一种替代方法。

看起来你把valueseinshaetzungen.alldata放在了错误的位置

你想把过滤后的列表赋值给一个值,然后遍历它。

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

下面是一个类似的例子

此版本适用于旧版本的angular。对于v1.3.17-beta+,您可以使用claire回答中提到的alias格式。

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