将参数传递给angularjs自定义过滤器

时间:2018-04-06 09:28:39

标签: javascript angularjs

我有global filter根据文字输入过滤数据。

<search-box ng-model="vm.filter.keyword"></search-box>

而且,我们使用像这样的过滤器

<tr ng-repeat="group in vm.groups | searchGlobal:vm.filter.keyword

我的过滤器如下:

.filter('searchGlobal',
    function searchGlobal () {
        return function searchGlobal (searchValArr,filterText) {
            var filteredData = [];
            for(var i = 0; i <searchValArr.length; i++) {
                if (searchValArr[i].name.toLowerCase().indexOf(filterText.toLowerCase()) !== -1 || 
                searchValArr[i].id.indexOf(filterText) !== -1) {
                    filteredData.push(searchValArr[i]);
                }                        
            }
            return filteredData;
        };
    });

现在,这就是问题所在。

要查找的字段可能不是 nameid

在某些情况下,他们可能 namephone_numbers

在某些情况下

nameagerefNumbers

如何相应处理过滤器内的场景逻辑?

2 个答案:

答案 0 :(得分:1)

您可以添加一个参数来检查您想要的属性

<tr ng-repeat="group in vm.groups | searchGlobal:vm.filter.keyword:vm.filter.listKeys

.filter('searchGlobal',
function searchGlobal () {
    return function searchGlobal (searchValArr,filterText, listKeys) {
        var filteredData = [];
        var listIdAdd = [];

        if (angular.isUnDefined(listKeys) || !angular.isArray(listKeys)) {
            listKeys = ['name', 'id'];
        }
        for(var i = 0; i <searchValArr.length; i++) {
            for (var j = 0; j < listKeys.length; j++) {
                if (searchValArr[i][listKeys[j]].toLowerCase().indexOf(filterText.toLowerCase()) !== -1 &&
                    listIdAdd.indexOf(searchValArr[i].id === -1)) {
                    filteredData.push(searchValArr[i]);
                    listIdAdd.push(searchValArr[i].id);
                }
            }
        }
        return filteredData;
    };
});

希望这个帮助

答案 1 :(得分:0)

您可以创建一个过滤器,检查是否有任何对象键包含关键字。

我创建了一个简单的示例here

过滤器功能如下所示,请注意它使用了一些现代JS功能,如String.includesangular.module("myApp") .filter("searchGlobal", function(){ return function(data, keyword){ // Return a filtered array of items in the initial array return data.filter(function(obj){ // Check if any (some) of the object keys contains the keyword return Object.values(obj).some(function(value){ return value.includes(keyword); }); }); }; }); ,如果需要较旧的浏览器支持,可以进行交换。

import (
    "github.com/spf13/cobra"

    "git.domain.com/x/y/tlsgenerate"
)

func main() {
    rootCmd.AddCommand(tlsgenerate.CobraCommand)
}