Angular - DataSource 的 Observable 或 Subject

标签 angular typescript angular-material

我有一个 Angular 7 应用程序,其中包含 Mat Tables 从 API 检索数据。我已经分配了动态分页值,即每当我基于某个下拉值加载网格时 pageSizeOptions 值都会发生变化,默认情况下所有记录都会显示。

如果 API 返回 23 条记录,那么 pageSizeOptions 将有 10,20,23,30,40,50,默认情况下它会显示所有 23 条记录。下次我更改下拉值时,API 返回 45 条记录,但这次我的网格仍然只显示 23 条记录,尽管 pageSizeOptions 有 10、20、30、40、45、50 并且选择显示 45 条。

我认为这是由于在分配 pageSizeOptions 值之前加载了 View /网格,因为 API 需要一些时间来返回数据。我想通过实现 Observable/subscribe 来解决这个问题。

我不确定如何为 pageSizeOptions 实现这些。有人可以帮我解决这个问题吗?

let gridData = responseStudents.Students.map(item => new ResponseStudents());
this.myDataSource = new MatTableDataSource(gridData);
this.Count = gridData.length;
this.PageSizeOptions = [this.Count, 5, 10, 25, 100, 500];
//To remove duplicate
this.PageSizeOptions = Array.from(this.PageSizeOptions.reduce((m, t) => m.set(t, t), new Map()).values());

最佳答案

我能够得到 StackBlitz这可能会完成你正在寻找的基础。当涉及到通过组件文件完成的分页更新时,实际刷新表格最终会出现一些问题,所以我选择更改数据源。

您基本上应该能够获取 changePageArray() 方法中显示的代码并为您的用例实现。在需要的地方添加逻辑,如果它没有传播到 ui,可能会刷新 changeDetection。

希望这就是您要找的东西,编码愉快!

关于Angular - DataSource 的 Observable 或 Subject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61929634/

相关文章:

Angular 阻塞(同步)http 调用

Angular 7 应用程序部署到 Heroku - 构建失败,应用程序错误

javascript - Angular - 多模块

node.js - TypeScript - 如何结合使用 Mongoose 填充来定义模型?

html - 在 mat-grid-list (Angular 6) 中设置单个图 block 的行高

angular - 如何在 Angular 9 中导入所有 Angular Material 模块

Angular4 更改选择框返回错误值

javascript - 使用 TypeORM,向实体添加列时出现 `SQLITE_CONSTRAINT: FOREIGN KEY constraint failed`

javascript - 如何在 TypeScript 2 中转换为数组?

angularjs - 带过滤器的MD芯片