Reputation: 195
I am able to display the record on my mat table, due to lots of records i want to set limit of records to show, so i have used mat paginator. But it is not working
vendoraction.component.html
<div class="purchases-style">
<div>
<table mat-table [dataSource]="displayvendors" class="mat-elevation-z1">
<ng-container matColumnDef="id">
<th mat-header-cell *matHeaderCellDef> Vendor ID </th>
<td mat-cell *matCellDef="let element"> {{element.id}} </td>
</ng-container>
<ng-container matColumnDef="changeColumn">
<th mat-header-cell *matHeaderCellDef> Change Column </th>
<td mat-cell *matCellDef="let element"> {{element.changeColumn}} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="['id','changeColumn'"></tr>
<tr class="rowhover" (click)="displayData(row.id)" mat-row *matRowDef="let row; columns: ['id','changeColumn']"></tr>
</table>
<mat-paginator [length]="100" [pageSize]="10" [pageSizeOptions]="[5, 10, 25, 100]" class="mat-elevation-z1">
</mat-paginator>
</div>
<router-outlet></router-outlet>
</div>
vendor-action.component.ts
import {Component, OnInit, ViewChild} from '@angular/core';
import {MatSort, MatTableDataSource, MatPaginator} from '@angular/material';
import { HttpClient } from '@angular/common/http';
import { Router } from '@angular/router';
import { ApiService } from 'src/app/api.service';
import { Displayvendor } from './displayvendor';
@Component({
selector: 'app-vendor-action',
templateUrl: './vendor-action.component.html',
styleUrls: ['./vendor-action.component.css']
})
export class VendorActionComponent {
displayvendors : any
constructor(private router:Router,public apiService:ApiService){}
@ViewChild(MatPaginator, {static: true}) paginator: MatPaginator;
ngOnInit()
{
this.apiService.userList().subscribe(displayvendors=>
{
this.displayvendors=new MatTableDataSource(displayvendors);
});
this.displayvendors.paginator=this.paginator;
}
displayData(id)
{
this.router.navigate(["/home/vendor-action/approval",id]);
}
}
And i am getting error:
ERROR TypeError: Cannot set property 'paginator' of undefined
Upvotes: 0
Views: 2305
Reputation: 534
Try to put it in subscribe method like this:
ngOnInit()
{
this.apiService.userList().subscribe(displayvendors=>
{
this.displayvendors=new MatTableDataSource(displayvendors);
this.displayvendors.paginator=this.paginator;
});
}
Upvotes: 1
Reputation: 47
Try setting the paginator option for displayvendors inside the subscribe method. The api call is asynchronous so the object is empty when you try to set the paginator property for it.
ngOnInit()
{
this.apiService.userList().subscribe(displayvendors=>
{
this.displayvendors=new MatTableDataSource(displayvendors);
this.displayvendors.paginator=this.paginator;
});
}
Upvotes: 1