与标题一样,过滤ng-repeat
列表的最佳方法是什么?要使用自定义(或现有).filter()
还是在我的控制器中创建自定义过滤器功能?
我之所以这么说是因为多次调用.filter()
(每次有一个dygest周期according to this answer)。
所以我担心性能问题。如果我有一个巨大的列表要在ng-repeat中使用并且需要对其进行过滤,那么在使用.filter()
时是否会产生巨大的影响?
另一方面,当在控制器内部使用自定义过滤器功能时,我只会在需要时仅过滤列表一次。我对这部分有了更好的控制。
这是正确的逻辑吗?或者还有其他方法来优化过滤器的使用吗?
答案 0 :(得分:1)
我相信你问这样的事情? (检查日志)
https://plnkr.co/edit/B0WSa11DWcCaImEoexVh?p=preview
所以就像你链接的帖子(链接到一个小提琴)一样,它在ng-filter
内真正触发了两次过滤器,但如果你在控制器内进行排序,它只会被击中一次。
修改
我的建议是,如果你有一个需要分类的大型对象:
后端排序(如果可能)
使用控制器内的功能进行排序
(制作一个自定义过滤器,它会在第一时间跳过过滤
并归还原件? :I)
答案 1 :(得分:0)
实际执行此操作的最佳方法是构建"指令"。如图所示(Ill Post multiple examples。):
app.controller('MainCtrl', function($scope) {
$scope.Items= [
{ id: 1, color: 'lightblue' },
{ id: 2, color: 'blue' }
];
});
div ng-repeat="item in Items| filter: { color: 'blue' }">
或者你可以用
来做 app.controller('MainCtrl', function($scope) {
$scope.friends= [
{ id: 1, name: 'John' },
{ id: 2, name: 'Richard' }
];
$scope.searchText= function (item) {
return item === 'John';
}
});
<div ng-repeat="friend in friends | filter: searchText">
所以对于嵌套数组......
app.controller('MainCtrl', function($scope) {
$scope.colors= [
{color:['blue','green','red']}
];
});
然后你会......
<div ng-repeat="color in colors">
<div ng-repeat="uniqueColor in color">
{{uniqueColor}}
</div>
</div>
在这里你甚至不需要过滤器..我喜欢称之为&#34;嵌套的ng-repeat&#34; :d
Here是一个更好的示范小提琴..
<强> EDIT3 强>
现在过滤ng-repeat ..
<div ng-repeat="color in colors">
<div ng-repeat="uniqueColor in color | filter: 'Blue'">
{{uniqueColor}}
</div>
</div>
小提琴代表here ..
<强> EDIT4 强>
你可以像我读的那样使用:
app.filter("filterName", function(){
return function(obj){
return "Apple.inc"
}
})