使用ViewChild信号后无法修改Angular Materials分页器值
解决viewChild信号修改分页器属性报错的问题
问题核心在于viewChild返回的是只读Signal类型,而非直接的MatPaginator实例,直接对paginator赋值相当于修改信号本身,违反了Angular信号的读写规则。
修正方法如下:
- 调用信号的
()方法获取当前的MatPaginator实例 - 增加空值检查,避免视图未初始化时实例为undefined
修改后的完整代码:
paginator = viewChild<MatPaginator>('paginator'); _onPaginationChange(event: PageEvent) { const previousPageIndex = this.req.pageNumber - 1; const previousPageSize = this.req.pageSize; this.checkModifiedCellsAndCallback(() => { this.req.pageNumber = event.pageIndex + 1; this.req.pageSize = event.pageSize; this.getTableData(); }); // Revert paginator state if the user cancels the action if (this.modifiedCells.size > 0) { setTimeout(() => { // 获取分页器实例并做空值检查 const paginatorInstance = this.paginator(); if (paginatorInstance) { paginatorInstance.pageIndex = previousPageIndex; paginatorInstance.pageSize = previousPageSize; } }); } }
补充说明:
- viewChild信号是只读信号,仅能通过
()方法获取当前值,不能直接对信号本身赋值 - 空值检查是必要操作,组件初始化阶段或视图未完成渲染时,信号可能返回undefined
内容的提问来源于stack exchange,提问作者ocanyldz
相关产品推荐
相关产品推荐

