angularjs - Angular 数据表服务器分页

标签 angularjs pagination datatables angular-datatables

我正在尝试在 Angular 数据表上实现服务器端分页,但我不断收到以下错误:错误:您无法将服务器端处理与 Angular 渲染器一起使用!

请参阅下面的相关代码:

purchasesTable.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')

purchasesTable.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')
              ];

        }
    }
})();

purchasesTable.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;
          });
        }
      }
})();

我知道上面的代码中有一些语法错误,但我似乎无法克服初始服务器端处理错误。最初,我向 API 端点发出 http POST 请求并使用 ng-repeat 显示响应。我认为这个错误是由于 ng-repeat 而引发的,但是在删除该代码并尝试通过 .withOption('ajax', etc. 生成表数据后,错误仍然存​​在抛出。任何帮助将不胜感激。谢谢。

最佳答案

datatable 指令声明中删除 ng,即

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

即使您现在使用 AJAX 进行渲染,您仍然将表格标记为由 ng-repeat 渲染。

关于angularjs - Angular 数据表服务器分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36320645/

相关文章:

javascript - 分页 : Remove element using jquery?

jquery - 将 Bootstrap 表排序器与 ASP.NET gridview 结合使用

javascript - 是否可以按日期(过去、现在、 future )拆分数据表 js,并可选择扩展和折叠?

jquery - ASP.NET Core 3.1 中的数据表服务器端处理

AngularJs 参数给所有对象一个 id

javascript - 这是一个 ngRouter Angular 错误还是我做错了什么

javascript - 使用 Bootstrap 模式防止子元素的父 onclick 事件传播

javascript - 将数据设置为对象属性

javascript - jQuery 数据表 : Pass returned JSON to a variable

node.js - 重定向到外部 URL