0

所以我正在做一个项目,我通过从 API 获取数据创建了一个数据表。我无法使用 MatPaginator 更新我的 dataTable ,所有数据仍显示在单个页面上,尽管我能够在 UI 中看到我的分页器并且它也在读取总数。我拥有但无法对 DataTable 进行分页的数据。我正在为 UI 使用 Angular 12 和 Angular Material。

下面是我的 .ts 文件。

export class ListUsersComponent implements OnInit  {

   

  @ViewChild(MatPaginator)  paginator: MatPaginator | any
@ViewChild (MatSort) sort : MatSort | any

  displayedColumns: string[] = ['Select All', 'id', 'name', 'username', 'email', 'Action'];


 listUsers: User[] = [];
  searchValue: string = '';
  filterTable: any = '';
  sortbyParam: any = "";
  sortdirection: any = 'asc';
  checks= false;
  dataSource : MatTableDataSource<User> | any
  

    constructor(private userService: UserService) { }


 ngOnInit(): void {

    this.userService.listUsers().subscribe((data: User[]) => {
      this.listUsers= data;
    });
 
    this.dataSource = new MatTableDataSource(this.listUsers); 
    this.dataSource.paginator =this.paginator;
       
  }

下面是我的html文件

PS-我设置时数据未显示在DataTable上[dataSource]= "dataSource"

<div class="wrapper">
    <mat-card>

        <mat-form-field class="searchInput">


            <input matInput type="search" placeholder="search" [(ngModel)]="searchValue">
            <button mat-raised-button color="accent" (click)="filter()">Search</button>
            <button mat-raised-button color="accent" (click)="clearFilter()">Clear</button>



        </mat-form-field>

        <select [(ngModel)]='sortbyParam'>
            <option value="name">Name</option>
            <option value="username">username</option>
            <option value="email">Email</option>

        </select>
        <button mat-raised-button color="accent" (click)="sortDirection()">Sort</button>
        <mat-card-title>

            <strong><em>User Details</em></strong>
            <h5 style="margin-left: 20px; padding-top: 10px;">
                <strong><em>Displaying {{listUsers.length}} Users</em></strong>
            </h5>
        </mat-card-title>

        <mat-card-content class="mat-elevation-z8">
            <table mat-table [dataSource]="listUsers
                  | searchfilter: filterTable | sortfilter:[sortbyParam ,sortDirection] " matSort>

                <ng-container matColumnDef="Select All" id="ngtablehead">
                    <th mat-header-cell *matHeaderCellDef><input type="checkbox" (change)="bulk($event)">Select All</th>
                    <td mat-cell *matCellDef="let element"><input type="checkbox" [checked]="checks"></td>
                </ng-container>


                <ng-container matColumnDef="id">
                    <th mat-header-cell *matHeaderCellDef mat-sort-header> No. </th>
                    <td mat-cell *matCellDef="let element "> {{element.id}} </td>
                </ng-container>


                <ng-container matColumnDef="name" id="ngtablehead">
                    <th mat-header-cell *matHeaderCellDef mat-sort-header> Name </th>
                    <td mat-cell *matCellDef="let element"> {{element.name }} </td>
                </ng-container>


                <ng-container matColumnDef="username">
                    <th mat-header-cell *matHeaderCellDef mat-sort-header> UserName</th>
                    <td mat-cell *matCellDef="let element"> {{element.username}} </td>
                </ng-container>


                <ng-container matColumnDef="email">
                    <th mat-header-cell *matHeaderCellDef mat-sort-header> Email </th>
                    <td mat-cell *matCellDef="let element"> {{element.email}} </td>
                </ng-container>

                <ng-container matColumnDef="Action">
                    <th mat-header-cell *matHeaderCellDef id='th'> Action </th>
                    <td mat-cell *matCellDef="let element"> <a [routerLink]="['..','view', element.id]">View</a> | <a
                            [routerLink]="['..','edit', element.id]">Edit</a> | <a
                            [routerLink]="['..','delete', element.id]">Delete</a> </td>
                </ng-container>

                <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
                <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>

            </table>
            <mat-paginator [pageSize]="5" #paginator [pageSizeOptions]="[5, 10, 20]" [length]="listUsers.length"
                showFirstLastButtons></mat-paginator>
        </mat-card-content>


    </mat-card>
</div>

这是我的数据表,即使每页项目设置为 5,所有数据也会这样显示。

4

0 回答 0