簡體   English   中英

如何通過Angular方式示例在Angular DataTables中使用服務器端選項?

[英]How to use server side option in Angular DataTables with the Angular way example?

我正在嘗試將Angular DataTables服務器端處理選項一起使用,但是當我嘗試在其“ Angular方式示例 ”中啟用它時,僅呈現第一個請求,隨后的請求(分頁,排序,搜索)被發送,他們從不更新表。

經過一番挖掘,我發現了一個與用戶無關的注釋 ,建議您使用自己的函數來覆蓋ajax選項來處理服務器端調用。

這里的技巧是將一個空數組返回給DataTables回調,因此它不會使用其渲染器來渲染表。 這將由Angular完成。 為服務器指定列名稱也是一個好主意。

ngOnInit(): void {
    var that = this;

    this.dtOptions = {
        pagingType: 'full_numbers',
        serverSide: true,
        processing: true,
        ajax: (dataTablesParameters: any, callback) => {
            that.http
                .post<DataTablesResponse>('/api/Persons', dataTablesParameters, {})
                .subscribe(resp => {
                    that.persons = resp.data;

                    callback({
                        recordsTotal: resp.recordsTotal,
                        recordsFiltered: resp.recordsFiltered,
                        data: [],
                    });
                });
        },
        columns: [
            { data: "id" },
            { data: "firstName" },
            { data: "lastName" },
        ],
    };
}

由於DataTables認為沒有要顯示的行,因此將顯示“無可用數據”消息。 處理它的最簡單方法是用CSS隱藏它。 您可以將其添加到全局styles.css中

.dataTables_empty {
    display: none;
}

然后在模板中自己顯示:

<tr *ngIf="persons?.length == 0">
    <td colspan="3" class="no-data-available">No data!</td>
</tr>

這是完整的代碼。 在Angular 5.0.0,datatables.net 1.10.16和angular-datatables 5.0.0中進行了測試:

角的方式-服務器- side.component.ts

import { Component, OnInit } from '@angular/core';
import { HttpClient, HttpResponse } from '@angular/common/http';
import { DataTablesResponse } from '../datatables/datatables-response';
import { Person } from './person';

@Component({
    selector: 'app-angular-way-server-side',
    templateUrl: 'angular-way-server-side.component.html',
    styleUrls: ['angular-way-server-side.component.css'],
})
export class AngularWayServerSideComponent implements OnInit {
    dtOptions: DataTables.Settings = {};
    persons: Person[];

    constructor(private http: HttpClient) { }

    ngOnInit(): void {
        var that = this;

        this.dtOptions = {
            pagingType: 'full_numbers',
            serverSide: true,
            processing: true,
            ajax: (dataTablesParameters: any, callback) => {
                that.http
                    .post<DataTablesResponse>('/api/Persons', dataTablesParameters, {})
                    .subscribe(resp => {
                        that.persons = resp.data;

                        callback({
                            recordsTotal: resp.recordsTotal,
                            recordsFiltered: resp.recordsFiltered,
                            data: [],
                        });
                    });
            },
            columns: [
                { data: "id" },
                { data: "firstName" },
                { data: "lastName" },
            ],
        };
    }
}

角的方式-服務器- side.component.html

<table datatable [dtOptions]="dtOptions" class="row-border hover">
    <thead>
        <tr>
            <th>ID</th>
            <th>First name</th>
            <th>Last name</th>
        </tr>
    </thead>
    <tbody>
        <tr *ngFor="let person of persons">
            <td>{{ person.id }}</td>
            <td>{{ person.firstName }}</td>
            <td>{{ person.lastName }}</td>
        </tr>
        <tr *ngIf="persons?.length == 0">
            <td colspan="3" class="no-data-available">No data!</td>
        </tr>
    </tbody>
</table>

角的方式-服務器- side.component.css

.no-data-available {
    text-align: center;
}

person.ts

export class Person {
    id: number;
    firstName: string;
    lastName: string;
}

數據表,response.ts

export class DataTablesResponse {
    data: any[];
    draw: number;
    recordsFiltered: number;
    recordsTotal: number;
}

SRC / Styles.css中

.dataTables_empty {
    display: none;
}

服務器端的實現方式幾乎與使用帶JavaScript / jQuery的數據表的方式相同。 您可以在PHP中看到一個非常簡單的示例實現

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM