【发布时间】:2016-09-08 09:40:28
【问题描述】:
我创建了这个自定义过滤器,它应该采用具有 job 和 name 属性的对象数组并返回具有 job 的关联数组em> 作为一个键和一个名称数组,它们作为值共享一个工作。
angular.module('myApp')
.filter('groupBy', function(){
return function(input){
if (!input || !input.length) { return; }
var out = new Array();
for (var crew of input){
if(typeof out[crew.job] === 'undefined'){
out[crew.job] = new Array();
}
out[crew.job].push(crew.name);
}
console.log(out);
return out;
}
});
console.log 的结果:
Assistant Director: ["P.J. Voeten"]
Director: ["George Miller"]
Script Supervisor: ["Sophie Fabbri-Jackson"]
Writer: ["Nick Lathouris", "George Miller", "Brendan McCarthy"]
然后我打算遍历数组并像这样打印它:
<li ng-repeat="(key, value) in cast.crew | groupBy">
<span class="bold">{{key}}:</span>
<span ng-repeat="name in value">{{name}}</span>
</li>
过滤器函数中的console.log 显示数组是按预期创建的,但它没有出现在视图中,也没有显示错误消息。
【问题讨论】:
-
如果您尝试在视图中添加 {{ cast.crew | json }} 输出是什么?
-
我收到此错误(视图中没有更改):错误:[ngRepeat:dupes] 不允许在转发器中重复。使用“track by”表达式指定唯一键。中继器:cast.crew 中的 (key, value) | json,重复键:字符串:,重复值:errors.angularjs.org/1.5.0-beta.2/ngRepeat/dupes?p0 (...)
-
将它添加到 for 循环上方的新行中,例如 {{ cast.crew | json }}
-
对,对不起;它输出如下数组: [ { "credit_id": "53d451210e0a262841002dd1", "department": "Writing", "id": 1027146, "job": "Writer", "name": "Nick Lathouris", "profile_path “:空},{“credit_id”:“52fe4933c3a368484e11f76f”,“部门”:“导演”,“id”:20629,“工作”:“导演”,“姓名”:“乔治米勒”,“profile_path”:“ /smrCjoAwYyn91uBngUWHrak12MD.jpg" },(...) ]
-
您收到的数据似乎是正确的。应用过滤器后的输出是什么?喜欢 {{ cast.crew |分组 | json}}?很奇怪。