Angular 带分页器的Mat表,表达式ChangedTerithasBeenChecked恢复页面索引后出错

Angular 带分页器的Mat表,表达式ChangedTerithasBeenChecked恢复页面索引后出错,angular,angular-material,mat-table,paginator,Angular,Angular Material,Mat Table,Paginator,我很高兴能在我目前的bug上得到一些帮助,因为几天以来我一直在试图找到一个解决方案。我想显示一个搜索结果,其中可以有几百个项目。我将mat表与mat分页器一起使用,以避免单个页面上出现过多项目。代码如下所示: 及TS: 导出类TableComponent实现OnInit{ public itemsColumns:Array=[“id”,“name”]; public itemsd:MatTableDataSource=新MatTableDataSource(); @ViewChild(Mat

我很高兴能在我目前的bug上得到一些帮助,因为几天以来我一直在试图找到一个解决方案。我想显示一个搜索结果,其中可以有几百个项目。我将
mat表
mat分页器
一起使用,以避免单个页面上出现过多项目。代码如下所示:


及TS:

导出类TableComponent实现OnInit{
public itemsColumns:Array=[“id”,“name”];
public itemsd:MatTableDataSource=新MatTableDataSource();
@ViewChild(MatPaginator,{static:false})设置paginator(
paginator:MatPaginator
) {
this.itemsd.paginator=paginator;
}
@ViewChild(MatSort,{static:false})集合排序(sort:MatSort){
this.itemsd.sort=排序;
}
构造函数(专用路由器:路由器,专用项服务:项服务){}
恩戈尼尼特(){
console.log(“初始化项目数据”);
this.itemsDS.data=this.itemsService.items;
}
ngAfterViewInit(){
if(this.itemsDS.paginator&&this.itemsService.currentIndex>-1){
log(“还原页面索引”+this.itemsService.currentIndex);
this.itemsDS.paginator.pageIndex=this.itemsService.currentIndex;
}
}
恩贡德斯特罗(){
const currentPage=this.itemsDS.paginator.pageIndex;
console.log(“在销毁时保存页面索引”+当前页面);
this.itemsService.currentIndex=currentPage;
}
//其他一些函数,如getter
}
这将在用户导航到某个元素时保存当前页面,并在用户返回搜索结果时恢复上次查看的页面

这工作正常,但仅当保存的页面索引具有值
0
时。每当用户从页面索引>1导航到某个项目时,Angular都会引发
表达式ChangedTerithasBeenChecked
错误。我的代码不包含对可以在组件树中更高位置使用的值的任何更改。所以我想这是
mat表
mat分页器
之间的交互问题

我创建了一个复制这种行为的程序,希望有人能找到解决这个错误的方法。请注意,当您单击
item11
item22
(第一页)时,您可以返回列表而不会引发错误。无论何时单击
item33
(第二页)、
item55
item66
(第三页),当导航回列表时,控制台都会显示错误

使用最新的angular 8库(核心8.2.14和材料8.2.3)编译


任何帮助都将不胜感激。

为了完整起见,我在这里添加了我得到的答案:

诀窍是在
setTimeout
调用中恢复页面索引:

  ngAfterViewInit() {
    if (this.itemsDS.paginator && this.itemsService.currentIndex > -1) {
      setTimeout(() => {
        this.itemsDS.paginator.pageIndex = this.itemsService.currentIndex;
        this.itemsDS.paginator.page.emit({
          length: this.itemsDS.paginator.getNumberOfPages(),
          pageIndex: this.itemsService.currentIndex,
          pageSize: this.itemsDS.paginator.pageSize
        });
      });
    }
  }
希望有一天,这将在角度材质中得到纠正。看一看(已经好几年了)