Angular DataTables Kurulumu
Angular projemize DataTables entegre edeceğiz. Bunu sıkıntısız ve kolay bir şekilde nasıl projemize entegre edeceğiz bundan bahsedeceğim.
Entegre edeceğimiz DataTables’ ın dokümantasyon web sitesi;
https://l-lin.github.io/angular-datatables/#/welcome
Bu sitedeki dokumantasyon bazı eksikliklerinden dolayı, DataTables’ ı entegre ettiğimizde düzgün çalışmadığını göreceksiniz. Aşağıdaki adımları takip ettiğinizde DataTables’ ı kolay bir şekilde kurabileceksiniz.
1-) Projemize DataTables yüklenmesi
npm install jquery --save npm install datatables.net --save npm install datatables.net-dt --save npm install angular-datatables@6.0.0 --save npm install @types/jquery --save-dev npm install @types/datatables.net --save-dev
npm install angular-datatables@6.0.0 –save angular versionuna göre datatables yükleriz.
2-) Projemize DataTables entegre edilmesi
Angular.json dosyasına javascript kütüphanelerimizi tanıtacağız.
{
"projects": {
"your-app-name": {
"architect": {
"build": {
"options": {
"styles": [
"node_modules/datatables.net-dt/css/jquery.dataTables.css"
],
"scripts": [
"node_modules/jquery/dist/jquery.js",
"node_modules/datatables.net/js/jquery.dataTables.js"
],
...
}
app.module.ts dosyamızda DataTablesModule’ ümüzü import ediyoruz.
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { DataTablesModule } from 'angular-datatables';//DataTablesModule' ümüzü import ediyoruz.
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
DataTablesModule //DataTablesModule' ümüzü import ediyoruz.
],
providers: [],
bootstrap: [ AppComponent ]
})
export class AppModule {}
Typescript
Projemizde DataTables kullanacağımız componentin .ts dosyasında aşağıdaki kodları kullanacağız. DataTables ta konfigürasyon yapmak için dtOptions: DataTables.Settings = {
pagingType: ‘full_numbers’ }; kullanabiliriz.
import { Component, OnInit, ViewChild, OnDestroy } from '@angular/core';
import { HttpStudentService } from 'src/app/Services/http-coordinator.service';
import { Router } from '@angular/router';
import { Student } from '../../models/student.model';
import { DataTableDirective } from 'angular-datatables';
import { Subject } from 'rxjs';
@Component({
selector: 'app-c-students',
templateUrl: './c-students.component.html',
styleUrls: ['./c-students.component.css']
})
export class CStudentsComponent implements OnInit, OnDestroy {
dtOptions: DataTables.Settings = {}; //DataTables konfigürasyonu için
//Student listesi çok fazla olabilir.
// Bunun için datanın render edilmeden önce çekildiğinden emin olmak için trigger kullanırız.
dtTrigger: Subject<any> = new Subject();
students : Student[];
constructor(private studentService :HttpStudentService,
private router: Router) { }
ngOnInit() {
// Tüm Student' ları json olarak service kullanarak api'den çekiyoruz.
this.studentService.getAllStudents()
.subscribe(
data => this.handleResponse(data),
error => this.handleError(error)
);
}
handleResponse(data){
//Manual olarak table'ı render etmek için DT trigger fonksiyonunu çağırırız.
this.dtTrigger.next();
this.students=data;
}
handleError(error){
}
ngOnDestroy(): void {
// Evente unsubscribe olmayı unutmamak gerekiyor.
this.dtTrigger.unsubscribe();
}
}
HTML
Data tables tablomuzda datatable ve [dtTrigger]=”dtTrigger” directive’ lerini kullanırız.
<table datatable class="row-border hover" [dtOptions]="dtOptions" [dtTrigger]="dtTrigger" >
<thead>
<tr>
<th>ID</th>
<th>First name</th>
<th>Email</th>
<th></th>
</tr>
</thead>
<tbody *ngIf="students?.length != 0">
<tr *ngFor="let item of students">
<td>{{item?.id}}</td>
<td>{{item?.first_name}}</td>
<td>{{item?.email}}</td>
<td>
<a [routerLink]="['/student/', item?.id]" ><button class="btn btn-primary"><i class="fa fa-search"></i></button></a></td>
</tr>
</tbody>
<tbody *ngIf="students?.length == 0">
<tr>
<td colspan="3" class="no-data-available">No data!</td>
</tr>
<tbody>
</table>
Başarılar…