ngx-datatables-net Modern Angular wrapper for DataTables.net

Server-side processing

serverSide: true delegates paging/sorting/filtering to the backend. This demo's ajax is a function simulating a server over 500 rows, only the current page is ever sent to the browser.

IDNamePositionOfficeAgeStart dateSalaryStatus
import { inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { type Config } from 'ngx-datatables-net';

interface ServerResponse {
  recordsTotal: number;
  recordsFiltered: number;
  data: unknown[];
}

private http = inject(HttpClient);

options: Config = {
  serverSide: true,
  processing: true,
  columns: [
    { data: 'id', title: 'ID' },
    { data: 'name', title: 'Name' },
    { data: 'position', title: 'Position' },
    { data: 'office', title: 'Office' },
  ],
  // DataTables puts paging, sort and search into `request`. Post it to your
  // API and call back with the response. Only the current page is fetched.
  ajax: (request, callback) => {
    this.http.post<ServerResponse>('/api/employees', request).subscribe((res) =>
      callback({
        draw: request.draw,
        recordsTotal: res.recordsTotal,
        recordsFiltered: res.recordsFiltered,
        data: res.data,
      }),
    );
  },
};

Server-side backends

Server-side processing is a documented JSON contract: DataTables sends paging, ordering and search parameters, and your endpoint returns draw, recordsTotal, recordsFiltered, data. The shape is the same regardless of frontend, so libraries that implement it for other stacks work unchanged with ngx-datatables-net:

No package for your stack? Implement the server-side protocol directly, it is just the request/response shape above.