ngTable с данными из веб API не работает - PullRequest
0 голосов
/ 20 октября 2018

Я использую ngTable для AngularJS и получаю данные из веб-API.Проблема началась, когда я попытался использовать фильтры в таблице.

Если я делаю это таким образом, таблица заполняется данными, но фильтры не работают:

$scope.clientesTable = new NgTableParams({
            page: 1,
            count: 10
        }, {
                getData: function (params) {
                    var clientes = clientesService.getAll(baseUrl);
                    clientes.then(function (data) {
                        $scope.clientesTableData = data.data;
                    }, function (error) {
                        console.log("Error: " + error);
                    });
                }

            });

В документации код выглядит примерно так:

$scope.clientesTable = new NgTableParams({
                page: 1,
                count: 10
            }, {
                    getData: function (params) {
                        var clientes = clientesService.getAll(baseUrl);
                        clientes.then(function (data) {
                              params.total(data.inlineCount);
                              return data.results;
                        }, function (error) {
                            console.log("Error: " + error);
                        });
                    }

                });

Делая так, я не вижу данных во внешнем интерфейсе.Если искать данные в clientesTable:

enter image description here

РЕДАКТИРОВАТЬ: Ответ от веб-API: enter image description here

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

Если я смотрю на этот ответ https://stackoverflow.com/a/29629034/3177115, я вижу, что NgTableParams используется по-другому.Вам нужно использовать его с обещанием, которое возвращает данные обратно в объект NgTableParams.

$scope.tableParams = new ngTableParams({
            page: 1, count: 5,
        }, {
            getData: function ($defer, params) {
                $http.get(testUrl, { params: params })
                     .then(function(res) {
                        $defer.resolve(res.data.items);
                    }, function(reason) {
                        $defer.reject();
                    }
                );
            },
        });

Подробную информацию см. В полном примере. Я немного упростил пример для лучшего понимания.

РЕДАКТИРОВАТЬ:

Я думаю, что API ng-таблиц изменился - он больше не ожидает защитника.Теперь, снова глядя на ваш первый пример кода (который, как вы говорите, работает), я понимаю, почему фильтр не работает: вы не передаете информацию о фильтре обратно в службу.

Документы таблицы ng говорят: http://ng -table.com / # / filtering / demo-filtering-basic

Есть функция getData?В этом случае вам нужно применить значения из NgTableParams.filters () к данным, которые вы хотите отобразить в вашей таблице.Обычно это тот случай, когда данные извлекаются с сервера

Я не знаю вашу службу, но можете ли вы добавить параметры фильтра в вызов службы?

var clientes = clientesService.getAll(baseUrl, params._params)

Кстати: документы ng-таблицы - это кошмар - все образцы наследуются друг от друга и используют директивы и инъекции.

0 голосов
/ 21 октября 2018

Вы должны указать ключевое слово return перед clientes.then() внутри метода getData.

...