【问题标题】:Filter a nested list in an AngularJS Template and get the count of the filtered data在 AngularJS 模板中过滤嵌套列表并获取过滤数据的计数
【发布时间】:2015-11-17 01:17:49
【问题描述】:

是否可以使用 AngularJS 过滤嵌套列表并计算过滤后的嵌套项返回的数量?

目标是通过read:true过滤每个项目。

这是数据:

guest = [
  {"id":148,"guest":2,"user":1,"read":true},
  {"id":147,"guest":2,"user":1,"read":false},
  {"id":58,"guest":2,"user":1,"read":false}
]

这个数组叫做guest,数组中的每一项都是message

模板过滤器语法会变成这样吗?

{{ (for m in guest.messages | filter: m.read: true).length }}

这里的关键是这个不使用ng-repeat。关于如何使用 ng-repeat 执行此操作的答案有很多,但在单个语句中过滤嵌套列表时却没有。

这在template 中是否可行,或者可能唯一的方法是在controller 中?

提前致谢

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    从视图中代码可读性的角度来看,一个简单的自定义过滤器可能是最好的

    app.filter('numRead', function(){
       return function(guestArr){
         return guestArr.filter(function(guest){
           return guest.read;
         }).length
       }      
    });
    

    用法:

    Read count = {{guest| numRead}}
    

    DEMO

    【讨论】:

    • guest.messages 是需要过滤的数组,所以我在答案中更新了它。除此之外,非常感谢。这是一个真棒!答案,正是我想要做的。谢谢!
    • 好的,我只是匹配演示中显示的数据,通常最好让它们都匹配,否则问题和答案会不同,可能会混淆未来的读者
    • @chrlietfl 我删除了我的编辑。你是对的。所有都应该匹配,guest.messages 部分来自我的源代码,所以并不重要。再次感谢您。
    猜你喜欢
    • 2016-07-12
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多