AngularJs - 仅按自定义过滤器中的某些字段过滤对象

AngularJs - Filter an object only by certain fields in a custom filter

我正在处理这个 codepen。数据来自对象数组,我只需要按 nameamount.

进行筛选

我有这个代码,但是如果你在搜索框中输入一个字符,它只会按数量搜索,而不是名称 ] 也。换句话说,如果您键入“warren”或“37.47”,它必须 return 相同的结果,但不会没用。

var filterFilter = $filter('filter');
 $scope.filter = {
 condition: ""
};
$scope.$watch('filter.condition',function(condition){
 $scope.filteredlist = filterFilter($scope.expenses,{name:condition} && {amount:condition});
 $scope.setPage();
});

您想为您的应用创建自定义过滤器。

directiveApp.filter("myFilter", function () {
    return function (input, searchText) {
        var filteredList = [];

        angular.forEach(input, function (val) {
            // Match exact name
            if (val.name == searchText) {
                filteredList.push(val);
            }
            // Match exact amount
            else if (val.amount == searchText) {
                filteredList.push(val);
            }
        });
        input = filteredList;
        return input;
    };
});

您可以在此过滤器中编写您的逻辑,现在使用此过滤器来过滤您的列表。

更新

您可以将此过滤器应用到您的自定义过滤器中 pagination

这是您的代码的新版本。 Codepen

代码更新列表

  1. 为您的 ng-repeat 属性添加了新的过滤器参数

    ng-重复="expense in filteredlist | pagination: pagination.currentPage : numPerPage : filter.condition"

    ...

嗯,终于(基于idea of Abhilash P A and reading the docs),我这样解决了我的问题:

var filterFilter = $filter('filter');
   $scope.filter = {
     condition: ""
   };
   $scope.$watch('filter.condition',function(condition){
     $scope.filteredlist = filterFilter($scope.expenses,function(value, index, array){
        if (value.name.toLowerCase().indexOf(condition.toLowerCase()) >= 0 ) {
          return array;
        }
        else if (value.amount.indexOf(condition) >= 0 ) {
          return array;
        }
     });
     $scope.setPage();
   });

决赛codepen! (真棒)