TypeScript实现HTTP Post响应分批加载,前端表格懒加载10条数据
实现TypeScript(Angular)中HTTP POST的按需分页加载
当然可行!要给你的MatTable实现这种懒加载/按需分页的效果,核心是让后端配合做分页查询(毕竟10万行数据一次性传到前端肯定会卡死),然后前端通过分页器触发新请求来加载对应页的数据。下面是针对你的代码的具体改造方案:
一、先搞定后端支持(关键前提)
你需要和后端开发同学配合,让POST接口支持分页参数:
- 前端每次请求时,传递
page(当前页码,建议从0开始)和pageSize(每页行数,这里固定为10)这两个参数(可以放在请求body里,和你的搜索条件一起) - 后端返回的数据结构要包含两个核心字段:
data: 当前页的10条数据列表totalCount: 符合条件的总数据条数(用来让分页器知道总共有多少页)
二、前端代码改造
1. 定义必要的组件变量
在你的组件类里添加这些变量,用来管理分页状态:
// 分页参数 currentPage = 0; pageSize = 10; totalDataCount = 0; // 搜索条件(保留你的查询参数,分页时要一起传) searchBody: any;
2. 封装分页请求函数
把原来的请求逻辑封装成一个函数,方便分页时重复调用:
private loadUserLogins(page: number): void { this.isLoadingResults = true; // 把分页参数加到请求body里 const requestBody = { ...this.searchBody, // 你的原有搜索条件 page: page, pageSize: this.pageSize }; this.http.post(environment.BASE_URL + searchPage, requestBody, { headers: headers }) .subscribe( (response: any) => { // 后端返回的data是当前页的10条数据,totalCount是总条数 this.userlogins = response.data; this.totalDataCount = response.totalCount; this.dataSource = new MatTableDataSource(this.userlogins); this.isLoadingResults = false; // 设置分页器的总数据量 setTimeout(() => { this.paginator.length = this.totalDataCount; this.paginator.pageIndex = page; this.paginator.pageSize = this.pageSize; }); // 处理无数据的情况 this.searchData = this.dataSource.filteredData.length > 0; }, (error: any) => { console.error(error); this.isLoadingResults = false; } ); }
3. 初始化加载第一页
在组件初始化或者搜索触发时,先加载第一页数据:
// 假设你的搜索触发逻辑是这个函数 onSearch(): void { this.currentPage = 0; // 保存当前的搜索条件,分页时复用 this.searchBody = { /* 你的搜索参数,比如username、dateRange等 */ }; this.loadUserLogins(this.currentPage); }
4. 监听分页器的页码变化
在组件的ngAfterViewInit里监听分页器的page事件,触发对应页的加载:
ngAfterViewInit(): void { this.paginator.page.subscribe((event) => { this.currentPage = event.pageIndex; this.pageSize = event.pageSize; this.loadUserLogins(this.currentPage); }); }
三、为什么不能用原来的slice方式?
你原来的代码是把所有数据请求到前端后再切前10行,但面对10万行数据时:
- 网络传输时间会极长,用户体验极差
- 前端内存会被大量占用,甚至导致页面崩溃
- 完全浪费带宽和服务器资源
所以后端分页是唯一合理的方案,每次只请求当前需要的10条数据,性能和体验都会好很多。
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

