javascript - inicializace stránkovače Angular Material 2 s tabulkou mat-table
Snažím se, aby komponenta stránkování Angular Material 2 fungovala s komponentou tabulky (direktivou mat-table).
Řídil jsem se dokumentací mat-table, abych přidal stránkovací prvek, a snažil se, aby jejich příklad fungoval s mojí stávající funkční mat tabulkou.
V souboru component.html mám funkční mat tabulku a stránkovací ovladač:
<div class="example-container">
<mat-table [dataSource]="dataSource">
// columns and rows
</mat-table>
<mat-paginator #paginator
[pageSize]="10"
[pageSizeOptions]="[5, 10, 20]"
[showFirstLastButtons]="true">
</mat-paginator>
</div>
Komponenta, která používá tento HTML, implementuje ngOnInit:
ngOnInit() {
myapi.apirequest()
.subscribe((dataResponse: any) => {
this.dataSource = new BasicDataSource(dataResponse);
this.dataSource.paginator = this.paginator;
console.log(this.paginator);
});
});
}
A komponenta získá stránkovač pomocí @ViewChild:
@ViewChild(MatPaginator) paginator: MatPaginator;
Problém je v tom, že stránkovač nic nedělá a tlačítka Další a Předchozí jsou šedá.
Console.log(this.paginator) dává:
_changeDetectorRef: Objekt { _view: {…}, _viewContainerRef: null, _appRef: null } _displayedPageSizeOptions: Pole(3) [ 5, 10, 20 ] _hidePageSize: false _initialized: true _intl: Objekt { itemsPerPageLabel: "Položek na stránku:", nextPageLabel: "Další stránka", previousPageLabel: "Předchozí stránka", … } _intlChanges: Objekt { closed: false, syncErrorThrown: false, syncErrorThrowable: false, … } _length: 0 _pageIndex: 0 _pageSize: 10 _pageSizeOptions: Pole(3) [ 5, 10, 20 ] _showFirstLastButtons: true page: Objekt { _isScalar: false, closed: false, isStopped: false, … } proto: Objekt { pageIndex: Getter & Setter, length: Getter & Setter, pageSize: Getter & Setter, … }
Nevím, jak ladit/pochopit, co způsobuje, že stránkování nefunguje.
Můj BasicDataSource rozšiřuje DataSource a používání ngAfterViewInit nefunguje, protože this.datasource je v této chvíli nedefinované (API volání ještě není dokončeno).
Odpověď č. 1
Inicializujte stránkovač po inicializaci zobrazení.
ngAfterViewInit() {
this.dataSource.paginator = this.paginator;
}
Inicializujte datový zdroj s prázdným polem.
ngOnInit() {
this.dataSource = new BasicDataSource([]);
myapi.apirequest()
.subscribe((dataResponse: any) => {
this.dataSource = new BasicDataSource(dataResponse);
this.dataSource.paginator = this.paginator;
console.log(this.paginator);
});
});
}
