разбиение на страницы сервера angular datatables

Я пытаюсь реализовать разбиение на страницы на стороне сервера для угловых данных, но продолжаю получать следующую ошибку: Error: You cannot use server side processing along with the Angular renderer!

См. соответствующий код ниже:

покупкиTable.jade

.panel.panel-default.userTable
  .panel-heading.tableStatementHeader Purchases
  .panel-body
    div()
      table.row-border.hover(datatable='ng', dt-options='purchasesCtrl.dtOptions', dt-columns='purchasesCtrl.dtColumns')

закупкиTable.controller.js

    (function() {
        'use strict';

        angular
            .module('app.purchasesTable')
            .controller('PurchasesTableController', PurchasesTableController);

        PurchasesTableController.$inject = ['envService','$resource', 'DTOptionsBuilder', 'DTColumnBuilder','$http','$state','$stateParams','PurchasesTableService', '$scope'];
        function PurchasesTableController(envService, $resource, DTOptionsBuilder, DTColumnBuilder,$http,$state,$stateParams,PurchasesTableService,$scope) {

            var vm = this;

            activate();

            ////////////////

            function activate() {
              vm.id = $stateParams.id;

              //STYLE TABLES
              vm.dtOptions = DTOptionsBuilder.newOptions()
                                .withOption('ajax', function(data, callback, settings){
                                  console.log(data);

                                  PurchasesTableService.getData()
                                    .then(function(result){
                                      console.log('THIS', result);
                                    });
                                })
                                .withDataProp('data')
                                .withOption('serverSide', true)
                                .withOption('processing', true)
                                .withOption('order', [[0, 'desc']])
                                .withPaginationType('full_numbers');
              vm.dtColumns = [
                  DTColumnBuilder.newColumn('event_date').withTitle('Event Date'),
                  DTColumnBuilder.newColumn('title').withTitle('Store'),
                  DTColumnBuilder.newColumn('reason').withTitle('Reason'),
                  DTColumnBuilder.newColumn('amount').withTitle('Amount'),
                  DTColumnBuilder.newColumn('locking_date').withTitle('Locking Date'),
                  DTColumnBuilder.newColumn('id').withTitle('ID'),
                  DTColumnBuilder.newColumn('sid').withTitle('SID')
              ];

        }
    }
})();

закупкиTable.service.js

(function() {
    'use strict';

    angular
        .module('app.purchasesTable')
        .service('PurchasesTableService', PurchasesTableService);

    PurchasesTableService.$inject = ['$http'];
    function PurchasesTableService($http) {
        this.getData = getData;

        ////////////////

        function getData () {
          var gaBody = {
            'start':0,
            'length':10,
            'columns[0][data]':1,
            'order[0][column]':0,
            'order[0][dir]':'desc'
          };
          var req = {
            method: 'POST',
            url: 'api/endpoint',
            headers: {
              'Authorization': 'something something'
            },
            data: gaBody
          };
          return $http(req).then(function(resp) {
            return resp.data.data;
          });
        }
      }
})();

Я знаю, что в приведенном выше коде есть некоторые синтаксические ошибки, но я не могу пройти мимо начальной ошибки обработки на стороне сервера. Первоначально я отправлял HTTP-запрос POST к конечной точке API и отображал ответ с помощью ng-repeat. Я думал, что эта ошибка возникает из-за ng-repeat, но после удаления этого кода и попытки сгенерировать данные таблицы через .withOption('ajax', etc. ошибка все еще возникает. Любая помощь будет принята с благодарностью. Спасибо.


person samuelstarbuck    schedule 30.03.2016    source источник
comment
Как вы передаете параметры limit и offset?   -  person zygimantus    schedule 06.05.2017


Ответы (1)


Удалите ng из объявления директивы datatable, т.е.

table.row-border.hover(datatable='', dt-options='purchasesCtrl.dtOptions', dt-columns='purchasesCtrl.dtColumns')
                                 ^^       

Несмотря на то, что теперь вы выполняете рендеринг с помощью AJAX, вы по-прежнему отмечаете таблицу как рендеринг с помощью ng-repeat.

person davidkonrad    schedule 03.04.2016