【问题标题】:Pagination does not work after I perform an operation on table like add/edit/delete a row (Angular 10)在我对表执行诸如添加/编辑/删除一行(Angular 10)之类的操作后,分页不起作用
【发布时间】:2021-09-05 15:25:17
【问题描述】:

我正在使用 mat-paginator 对我的表格进行分页。第一次加载页面时分页工作正常。但是,如果我执行 CRUD 操作,则分页不起作用。所有行都显示在同一页面中。我认为这是因为我在 *ngIf 中使用分页来按条件显示结果表。我研究了谷歌并尝试了一些解决方案,比如使用 [hidden],在@viewchild 分页字段中将静态设置为 false。我不确定如何解决此问题。

export class UsersComponent implements OnInit, OnDestroy { 
 public dataSource = new MatTableDataSource<IUser>();
 @ViewChild(MatSort) sort: MatSort;
 @ViewChild(MatPaginator) paginator: MatPaginator;

 constructor(
 ){
  }

  ngOnInit(): void {
    this.dataSource = new MatTableDataSource<IUser>(this.users);
  }

  ngAfterViewInit(): void {
    this.dataSource.sort = this.sort;
    this.dataSource.paginator = this.paginator;
  }

}

users.component.html

<div class="users-container" *ngIf="UsersResults">
  <mat-card fxLayout="column" @fade class="users-card mat-elevation-z6">
    <div fxFlex="10" fxlayout="row" fxLayoutAlign="center center">
       <h1 class="heading">Users</h1>

       <button mat-raised-button class="user-button" (click)="showCreateUserView()">Create User</button>
    </div>

    <div fxFlex="80">
      <span fxFlex="3"></span>
      <div fxFlex="100">
        <table class="result-table" mat-table [dataSource]="dataSource" matSort matSortStart="desc">
           <ng-container matColumnDef="username">
             <th mat-header-cell *matHeaderCellDef mat-sort-header id="username">Username</th>
             <td mat-cell *matCellDef="let element">
               <button mat-button(click)="showEditUserView(element)" [disableRipple]="true" matToolTip="click to edit user">{{element.username}}</button>
             </td>
           </ng-container>

           <ng-container matColumnDef="admin">
              <th mat-header-cell *matHeaderCellDef id="status">Status</th>
              <td mat-cell *matCellDef="let element">
                       
              </td>
           </ng-container>

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

        <mat-paginator #paginator
                       [pageIndex]="0"
                       [pageSize]="7"
                       [pageSizeOptions]="[15, 30]">
        </mat-paginator>
      </div>
    </div>
  </mat-card>
</div>
 

【问题讨论】:

标签: angular pagination angular10 mat-table mat-pagination


【解决方案1】:

我找到了解决方案。看起来这个问题是由 Angular 引起的,其中 view child 没有在 ngAfterViewInit 中使用 *ngIf 捕获元素,所以这个解决方案对我有用。下面提供了类似问题的 Github 链接:

如果有更好的解决方案,请随时在此处发布。

删除代码:

   this.dataSource.paginator = this.paginator;

从 ngAfterViewInit 并添加以下代码:

    private paginator: MatPaginator;

    @ViewChild(MatPaginator) set matPaginator(mp: MatPaginator) {
      this.paginator = mp;
      this.dataSource.paginator = this.paginator;
    }

http://www.github.com/angular/components/issues/10205

【讨论】:

  • 嗨@MauricioGraciaGutierrez,谢谢你的解决方案!它帮助我解决了问题。但是,我确实提供了找到此解决方案的 Github 问题的参考。似乎不是你(至少不是这个名字)解决了这个问题。
  • @MauricioGraciaGutierrez 我刚刚意识到你已经对我的问题发表了评论,我知道你在说什么。但是我在你在这里发布之前发现了 GitHub 问题,如果你看到我的答案时间戳,你会发现。直到现在我才看到你的评论链接,但非常感谢..
  • 感谢您澄清这一点,以防您想知道,我没有投反对票。很高兴知道您找到了解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多