AngularJS filter for multiple strings

后端 未结 6 926
时光取名叫无心
时光取名叫无心 2020-12-14 23:32

I\'m working through the AngularJS tutorial, and understand the basics of

However, the out of the box implementation seems limited to just filter the list of items

6条回答
  •  借酒劲吻你
    2020-12-15 00:06

    Here's my version. It uses JonoWilko's method of using the built in filterFilter combined with surfbud's AND/OR flag (defaulted to "AND").

    JavaScript

    angular.module('filters').filter('searchFilter', function($filter) {
    
        return function(inputArray, searchText, booleanOp) {
            booleanOp = booleanOp || 'AND';
    
            var searchTerms = (searchText || '').toLowerCase().split(/\s+/);
    
            if (booleanOp === 'AND') {
                var result = inputArray;
                searchTerms.forEach(function(searchTerm) {
                    result = $filter('filter')(result, searchTerm);
                });
    
            } else {
                var result = [];
                searchTerms.forEach(function(searchTerm) {
                    result = result.concat($filter('filter')(inputArray, searchTerm));
                });
            }
    
            return result;
        };
    });
    

    CoffeeScript

    angular.module('filters').filter 'searchFilter', ($filter)->
    
        (inputArray, searchText='', booleanOp = 'AND')->
            searchTerms = searchText.toLowerCase().split(/\s+/)
    
            if booleanOp is 'AND'
                result = inputArray
                searchTerms.forEach (word)->
                    result = $filter('filter')(result, word)
    
            else
                result = []
                searchTerms.forEach (word)->
                    result = result.concat $filter('filter')(inputArray, word)
    
            result
    

    'AND' Usage (default)

    'OR' Usage

提交回复
热议问题