ng-table , getData вызывается более одного раза, почему?

По какой-то причине, когда getData использует ресурс angular для передачи данных, он вызывается дважды, в результате чего ресурс дважды выполняет запрос REST ‹--- плохо...

Любая идея, почему и как это решить?

Вот рабочий пример testcase/plunker, воссоздающий этот сценарий (посмотрите на консоль браузера - " getData вызывается......" отображается дважды) кстати, как вы можете видеть, я на самом деле не использую ресурс для передачи реальных данных, просто для демонстрации сценария. В моем реальном приложении я использую ресурс для передачи реальных данных и их вызывается дважды, как в этом примере,

Спасибо вперед


Изучив src таблицы ng, я заметил следующее

$scope.$watch('params.$params', function(params) {
    $scope.params.settings().$scope = $scope;
    $scope.params.reload();
}, true);

Это означает, что таблицы называют это «getData» на count/filter/group/groupBy/page/sorting, что объясняет поведение, которое я видел.


person Daniel    schedule 03.03.2014    source источник


Ответы (3)


Когда вы вызываете params.count(...), вы просите ng-table обновлять данные при изменении размера страницы. Вот почему у вас есть два вызова get-data.

Если вы не хотите иметь пейджинг, удалите вызовы params.count и params.total. Если вам нужна подкачка, то задайте размер страницы и не меняйте его в getData.

person Alexander Vasilyev    schedule 03.03.2014
comment
Вы правы... Похоже, таблица перезагружается по счетчику/фильтру/группе/группе по/странице/сортировке. Спасибо - person Daniel; 03.03.2014

Это случилось со мной по странной причине. getData вызывается дважды только при инициализации (первой загрузке). изменение страницы или сортировка не вызывали getData дважды. Причина заключалась в том, что при инициализации директива ng-table была скрыта в файле шаблона.

person sajith    schedule 20.12.2016

Спасибо @Александру Васильеву. Я понял свою проблему, как вы сказали. Я хочу объяснить немного больше здесь. Фактически, объект «params» является конфигурацией объекта таблицы ng-table, тогда, если «params» изменились (например, количество или свойство объекта), ng-table вызовет функцию getData() для обновления таблицы. В моем случае я хочу получить информацию в объекте «параметры» и изменить ее, но я не хочу обновлять ng-таблицу. Я сделал это, клонировав объект «params» и работая, его объект скопирован. Клонируйте объект в JS с помощью jQuery:

var resultParams = jQuery.extend(true, {}, params.$params);

И тогда я буду работать над объектом resultParams вместо оригинала «params».

person SanjiMika    schedule 05.04.2017