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

По какой-то причине, когда getData использует угловой ресурс, чтобы доставить данные, которые он вызывает дважды, в результате чего ресурс дважды выполняет запрос 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 который объясняет поведение, которое я видел.

3 ответа

Решение

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

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

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

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

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

И тогда я буду работать над объектом resultParams вместо "params" original.

Другие вопросы по тегам