Нг-таблица, 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.