Angularjs 如何在ng repeat中按属性对对象数组排序而不触发无限循环
我有一条解析数据的路径:Angularjs 如何在ng repeat中按属性对对象数组排序而不触发无限循环,angularjs,angularjs-filter,Angularjs,Angularjs Filter,我有一条解析数据的路径: .state('app.items', { url: '/:item', views: { 'content@app': { templateUrl: 'app/views/item.html', controller: 'ItemsCtrl', } }, resolve: { items: ['SomeService', function (SomeService) { ret
.state('app.items', {
url: '/:item',
views: {
'content@app': {
templateUrl: 'app/views/item.html',
controller: 'ItemsCtrl',
}
},
resolve: {
items: ['SomeService',
function (SomeService) {
return SomeService.getData();
}
]
}
})
以及控制器:
app.controller('ItemsCtrl', ['items', function (items) {
this.items = items;
/**
* [
* {
* status: '...',
* }, ...
* ]
*/
}]);
我想按对象的属性对视图中的数组进行排序
<div ng-repeat="item in items | myFilter"></div>
此过滤器工作正常,但也会触发无限循环。我试图使用内置的orderBy
过滤器(它工作得很好),但我不相信删除的项目会是最后一个(如果我想添加更多状态怎么办?)。另外,我不能在控制器中使用自定义函数,因为这个过滤器将在整个应用程序中多次使用
我如何实现
myFilter
以不触发无限循环?你怎么知道它触发无限循环?@gaurav5430我在控制台中得到[$rootScope:infdig](…)
错误该过滤器似乎以一种规则的方式为我工作,请参见小提琴:,也许无限循环是由于其他原因造成的?@gaurav5430这个过滤器对我也适用,但只适用于小列表。如果我使用更大的列表(大约100个对象),我会得到这个错误。@gaurav5430我的代码中有一些奇怪的东西。我会自己调查的。谢谢你的帮助!
app.filter('myFilter', function () {
return function (items) {
return items.sort(function (item) {
return item.status === 'REMOVED' ? 1 : -1;
});
};
});