我正試圖在我的角度4應用程序中實現Datatable。我創建了一個指令,數據表正在填充。如何將屬性值更改爲角度4指令
現在,如果我刪除表數據,我可以看到行的視覺消失,但數據表仍然保存我的數據。解決方案是指令應該檢測數據的變化。
如果在指令中使用setInterval,它會是代價高昂的,因爲它將運行一個無限循環。
或者我得到的其他想法是創建屬性繪製和重繪。但是,同樣的問題是如何在輸入屬性中保持跟蹤變化,而不發生事件。
HTML代碼
<table class="table table-striped table-bordered" appDatatable [data]="roles" *ngIf="roles && roles.length">
<thead>
<tr>
<th>Role</th>
<th>Description</th>
<th>Created By</th>
<th>Created At</th>
<th>Updated By</th>
<th>Updated At</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let role of roles">
<td>{{role.name}}</td>
<td>{{role.description}}</td>
<td>{{role.created_by}}</td>
<td>{{role.created_at | date}}</td>
<td>{{role.updated_by}}</td>
<td>{{role.updated_at}}</td>
<td class="text-center">
<button class="btn btn-primary btn-sm" type="button" (click)="update(role)">
<span class="fa fa-pencil"></span>
</button>
<button class="btn btn-danger btn-sm" type="button" (click)="remove(role)">
<span class="fa fa-trash"></span>
</button>
</td>
</tr>
</tbody>
</table>
指令代碼
import { Directive, ElementRef, Input, OnChanges } from '@angular/core';
declare var jQuery:any;
@Directive({
selector: '[appDatatable]'
})
export class DatatableDirective implements OnChanges {
table:any;
@Input() data:any;
constructor(private el: ElementRef) {
this.initializeDataTable();
}
initializeDataTable(){
setTimeout(()=>{
this.table = jQuery(document).find(this.el.nativeElement).DataTable();
setInterval(()=>{this.watchData();}, 5000);
});
}
watchData(){
//I can watch the data change here. But is it a costly solution?
}
ngOnChanges(){ // not working
console.log(this.data);
}
}
希望我是在清楚我的問題。
總之,如何檢測指令輸入的變化。
我是有工作的。我需要在組件中使用setTimeout來重新定義輸入變化。將發佈工作代碼。謝謝你的努力。 –
我在SimpleChanges上獲得了您的觀點。問題是我在我的init和onchange上調用this.setTable。所以數據表被調用兩次。爲什麼ngOnchange和ngOnInit同時被觸發。 –
第一個被觸發的事件是ngOnChange,然後是ngOnInit。你可以在這裏找到洞序列https://angular.io/guide/lifecycle-hooks – zgue