在复杂对象中过滤和排序

时间:2016-04-05 07:25:40

标签: angularjs angularjs-scope angularjs-ng-repeat angularjs-filter angularjs-orderby

我有一个对象数组如下:

$scope.clients = [
              { client: { name: 'ABC', age: '25' } },
              { client: { name: 'BCD', age: '26' } },
              { client: { name: 'CDE', age: '26' } }
            ];

过滤器对象(实际上这与视图中的 ng-model 绑定到过滤器订单数组对象:

 $scope.filterParams = {
                nameSearch: 'ABC',
                order: 'age'
            };

当我尝试按client.name更新过滤器时,列表中找不到任何内容,而order by也不起作用:

 $scope.updateFilter = function () {
                var filtered;
                filtered = $filter('filter')($scope.clients, { 'client.name' : $scope.filterParams.nameSearch });
                filtered = $filter('orderBy')(filtered.client, $scope.filterParams.order);

                $scope.filteredList = filtered;
            }

 $scope.$watchCollection('filterParams', function () {
                $scope.updateFilter();
            });

这里有人能告诉我过滤和订购清单的正确方向吗?

1 个答案:

答案 0 :(得分:0)

调用$filter('orderBy')()时,可以使用函数作为第二个参数。函数的输入参数是要排序的数组的项。该函数使用'<&#;,'>',' =='返回要比较的值。

function(item){
          return parseInt(item.client[$scope.filterParams.order]);
}

此外,您没有对原始数组$scope.clients进行排序,而是对筛选结果进行排序,这只是一条记录。我想知道这是不是一个错误。

这是fiddle