Angular datatables с обещанием - перезагрузить строку

Я использую angular-datatables с обещанием, и все работает нормально. У меня есть много действий, которые можно выполнить с каждым регистром (используя ресурс angular $http), например, изменить статус или что-то в этом роде.

Но мне нужно перезагружать данные datatable после каждого действия, даже если я редактировал только одну строку. И этот процесс немного затянулся!

Есть ли способ перезагрузить только те данные, которые я изменил? Например, если я редактирую некоторые данные строки, я хочу, чтобы перезагрузилась только эта строка.

Простите меня, если это не умный вопрос, но мне нужно знать, могу ли я улучшить производительность действий над таблицей.

Вот мой код!

DtOptions

    vm.dtOptions = DTOptionsBuilder.fromFnPromise(function() {
        vm.defer = $q.defer();
        vm.mainService.getItems(idtask, flag, type).then(function(result) 
            vm.defer.resolve(result.data);
        });
        return vm.defer.promise;
    })
    .withOption('headerCallback', function(header) {
        if (!vm.headerCompiled) {
            vm.headerCompiled = true;
            $compile(angular.element(header).contents())($scope);
        }
    })
    .withPaginationType('full_numbers')
    .withOption('createdRow', createdRow)
    .withOption('deferRender', true)
    .withDisplayLength(100)
    .withOption('initComplete', function() { });

Функция перезагрузки данных

    function reloadData() {
        var resetPaging = false;
        vm.dtInstance.reloadData(function callback() {}, resetPaging);
    }

После некоторого выполнения над таблицей я вызываю функцию reloadData().

Спасибо за любую помощь! И я прошу прощения за мой плохой английский.


person Raphael de Souza    schedule 29.08.2017    source источник


Ответы (1)


не перезагружайте страницу, просто добавьте последние добавленные данные в массив в ng-repeat

с простым нажатием javascript

рассмотрим ниже как массив, в который мы хотим добавить последний добавленный элемент. напишите это в «блоке успеха», поэтому, если есть подтверждение успешного сообщения, оно будет добавлено в текущий стек. то же самое можно сделать для удаления и обновления.

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.push("Kiwi");\
person Tarang Rathod    schedule 31.08.2017
comment
Если OP действительно использует ng-repeat, ему следует избегать этого и перейти на собственный рендеринг dataTables. ng-repeat является огромным узким местом. - person davidkonrad; 03.09.2017
comment
Я неt use ng-repeat. I use dataTables native rendering.. and i donне знаю, как добраться до определенной строки и перезагрузить ее (или хотя бы скрыть ее). - person Raphael de Souza; 04.09.2017
comment
рассмотрим этот пример codepen.io/kalaiselvan/pen/RRBzda, где $scope.data содержит все data, поэтому просто сделайте для него вышеуказанное предложение при публикации данных. - person Tarang Rathod; 05.09.2017
comment
единственное, что я пытаюсь сказать, это то, что есть переменная, в которой вы сохраняете все данные из обещания в той же переменной, добавляя данные, которые вы можете поместить в этот массив. Каким бы способом вы ни представляли данные, это не имеет значения, поскольку до контроллера это будет угловой способ. - person Tarang Rathod; 05.09.2017
comment
Вы в своих рассуждениях! Я получаю данные из промиса вроде этого vm.defer.promise.$$state.value. Я могу соединить их или сделать что-то и изменить данные таблицы, например vm.dtInstance.changeData(() =› { return newpromise; }); - person Raphael de Souza; 08.09.2017
comment
Таким образом, они намного быстрее перезагружают таблицу данных, запрашивая все данные снова. Спасибо! - person Raphael de Souza; 08.09.2017