是否可以对过滤器mutate
的结果进行过滤?假设我想编写一个过滤器,它实际上会在上一个列表中添加一些东西
module.filter('family',function(){
return function(data,expand){
var people = [];
data.forEach(function(child){
people.push(child);
// here add something extra
if (expand){
// the problem here I just want to demonstrate is that I have to
// generate the father and mother on the fly.
people.push(angular.$copy(child.father,{}));
people.push(angular.$copy(child.mother,{}));
}
});
return people;
}
});
我接下来要做的是:
<ul>
<li ng-repeat="person in children|faimly:true">
{{person.name}}
</li>
</ul>
这样做安全吗?我担心这可能会导致多个$digest()
或$apply()
编辑
可能这里的主要问题是,我每次都必须返回同一个对象(因为$watch
会比较===
,并且 afaik 在第一次渲染时至少有 2 个$digest
正在进行)。因此我不能generate
过滤器中的对象 - 会导致无限循环。我对吗?
generate
过滤器中的额外结果是否有任何选项?我可以以某种方式缓存它们,或者欺骗角度认为它们是相同的吗?