Как изменить состояние таблицы Angularjs Smart на основе внешнего фильтра - PullRequest
0 голосов
/ 06 октября 2019

У меня есть Angularjs Smart Table, где я написал свою собственную логику для фильтрации элементов массива.

Раньше логика работала нормально, потому что это была обычная HTML-таблица без разбивки на страницы, но когда я интегрировал свой собственный массивФильтр с плагином AngularJS Smart Table не работает, поэтому элементы фильтруются с использованием ng-show, поэтому из-за этой проблемы нумерация страниц или другие отфильтрованные значения коллекции не изменяются.

Например: если у меня есть 25 элементов, в которых 20 на первой странице и 5 на следующей странице, тогда, когда я делаю фильтрацию, используя мои собственные элементы фильтра, будут отфильтрованы, но состояние как пагинация, и все не будет работатьбудет по-прежнему оставаться на второй странице, независимо от того, какие элементы были там.

Код для фильтра массива (раскрывающийся список с множественным выбором):

<multiselect-dropdown model="SelectedStatus" options="Options" idprop="Value" displayprop="Value"></multiselect-dropdown>

Myкод для вывода строки

<tr st-select-row="row" st-select-mode="multiple"
    ng-repeat="row in display_records" | 
    ng-show="([row] | filterByArray:Selecteditem:'itemName').length">

Есть ли способ избежать этого ng-show и заставить фильтр работать с самим плагином smart table. У меня есть другие поля текстовых переменных для тех, кто использует обычный st-поиск, который отлично работает.

Обновление (мой код фильтрации массива):

 angular.module("App").filter('filterByArray', function () {
    return function (list, arrayFilter, element) {
        if (!angular.isUndefined(list) && !angular.isUndefined(arrayFilter) && arrayFilter.length > 0) {
            var tempList = [];
            angular.forEach(arrayFilter, function (id) {
                angular.forEach(list, function (listItem) {
                    if (angular.equals(listItem[element], id)) {
                        tempList.push(listItem);
                    }
                });
            });
            return tempList;
        }
        else
        {
            return list;
        }
    };
});

Ищукакое-то решение, в котором я могу внедрить этот фильтр myArray в состояние смарт-таблицы или обновить данные смарт-таблицы, когда был выбран фильтр массива.

...