AngularJS Пользовательский фильтр в таблице повторений ng - PullRequest
0 голосов
/ 06 марта 2020

Я могу фильтровать значения в таблице (особенно столбец c) с помощью этого пользовательского фильтра. Данные поступают из массива входных данных множественного выбора

Полный пример: http://jsfiddle.net/d1sLj05t/1/

myApp.filter('filterMultiple',['$filter',function ($filter) {
    return function (items, keyObj) {
        var filterObj = {
            data:items,
            filteredData:[],
            applyFilter : function(obj,key){
                var fData = [];
                if(this.filteredData.length == 0)
                    this.filteredData = this.data;
                if(obj){
                    var fObj = {};
                    if(angular.isString(obj)){
                        fObj[key] = obj;
                        fData = fData.concat($filter('filter')(this.filteredData,fObj));
                    }else if(angular.isArray(obj)){
                        if(obj.length > 0){ 
                            for(var i=0;i<obj.length;i++){
                                if(angular.isString(obj[i])){
                                    fObj[key] = obj[i];
                                    fData = fData.concat($filter('filter')(this.filteredData,fObj));    
                                }
                            }           
                        }                                       
                    }                                   
                    if(fData.length > 0){
                        this.filteredData = fData;
                    }
                }
            }
        };

        if(keyObj){
            angular.forEach(keyObj,function(obj,key){
                filterObj.applyFilter(obj,key);
            });         
        }               
        return filterObj.filteredData;
    } 
}]);
<tr ng-repeat="emp in empList | filterMultiple:{dept:selected}">    

Идеально подходит, когда существуют такие значения, как «продажи» или « account ", но когда значение не существует в таблице, возвращает все данные (когда я выбираю" not "или объединяю" not "и" sales "). Я ожидал пустой результат o только выбранные значения

1 Ответ

1 голос
/ 10 марта 2020

Я думаю, что вы можете выполнить sh, что вы хотите, с гораздо более простым фильтром. Возможно, вы захотите попробовать что-то вроде этого:

myApp.filter('filterMultiple',['$filter',function ($filter) {
    return function (items, keyObj) {
        //If the value isn't defined, don't filter at all.
        if (keyObj.value == undefined) {
            return items;
        }
        //Use javascript's native Array.filter() to get only the items that match.
        return items.filter(function(item) {
            //Keep any items whose specified attribute includes the selected value
            return item[keyObj.column].includes(keyObj.value);
        })
    }
}]);

И небольшое изменение в вашем HTML:

<tr ng-repeat="emp in empList | filterMultiple:{column:'dept', value:selected}"> 

Я не уверен, что вы подразумеваете под "объединить" не «и« продажи »», но я думаю, что это поможет вам двигаться в правильном направлении.

Вот некоторые ссылки, на случай, если вы не знакомы с некоторыми вещами, которые я делаю в код:

Документация для Array.filter - MDN

Array.filter лучше, чем $ filter ('filter') - StackOverflow

Документация для String.include - MDN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...