Как реализовать цикл в многопараметрическом фильтре в ng-повтор? - PullRequest
0 голосов
/ 02 апреля 2019

Я бы хотел сделать цикл в параметрах фильтра

Эй,
Я делаю таблицу с несколькими фильтрами. Каждый столбец в качестве входных данных для добавления строки для фильтрации.
Для каждого столбца я вызываю имя параметра с входом фильтра в функции фильтра: paramN: filter[n]
Есть ли способ сделать цикл таким образом, чтобы мне не приходилось писать каждый параметр один за другим?
У меня есть все, что мне нужно в массиве, но я не знаю, как (если это возможно) вызвать его в фильтре.
Должен ли я использовать пользовательский фильтр? Если да, какой будет синтаксис и замедлит ли он процесс?

Вот код моего фильтра:

<tr ng-repeat="folder in listFolders|
    filter:{param1:filter[1],
            param2:filter[2],
            param3:filter[3],
            ...
            paramN: filter[n]
            } as listVisible
">

Вот мой массив:

$scope.parametres=[
  {int:1, libelle:'name1', variable:'param1'},
  {int:2, libelle:'name2', variable:'param2'},
  {int:3, libelle:'name3', variable:'param3'},
  ...
  {int:n, libelle:'nameN', variable:'paramN'}
]

Спасибо!

1 Ответ

0 голосов
/ 09 мая 2019

На случай, если кто-нибудь когда-нибудь столкнется с той же проблемой, что и я:

Я сделал эту функцию в моем контроллере (она вызывается каждый раз, когда производится изменение во входах фильтров через ng-change)

$scope.filteringFunction = function(){ 
    var filtered=angular.copy($scope.listFolders);
    for(var i=0; i<$scope.parametres.length; i++){
        if($scope.filter[$scope.parametres[i].int]!==''){
            var filter =$rootScope.toNoCase($scope.filter[$scope.parametres[i].int]);
            var param = $scope.parametres[i].variable;
            filtered = filtered.filter(function (item) {
                return $rootScope.toNoCase(item[param]).includes(filter);
            });
        }
    }
    $scope.listFoldersFiltered=filtered;
};

и я немного изменил ng-repeat (в основном удалите фильтр и измените список listFolders на listFoldersFiltered)

<tr ng-repeat="folder in listFoldersFiltered as listVisible">

Если кто-то знает другой способ сделать это, я весь в ушах!

...