实现商品列表的分页功能,包括Material Paginator集成、页码切换、每页数量切换和总数显示。
mat-paginator组件length: 绑定到pagination.total(总记录数)pageSize: 绑定到pagination.pageSize(每页显示数量)pageIndex: 绑定到pagination.page - 1(当前页码,从0开始)pageSizeOptions: 设置为[10, 20, 50, 100](可选的每页数量)showFirstLastButtons: 显示首页和末页按钮onPageChange(event: PageEvent)方法✅ 处理页码变化:
onPageChange(event: PageEvent): void {
this.pagination.page = event.pageIndex + 1;
this.pagination.pageSize = event.pageSize;
this.loadProducts();
}
✅ 页码切换时自动重新加载商品数据
pagination.pageSize共 {{ pagination.total }} 个商品✅ 在组件中维护分页状态:
pagination: Pagination = {
page: 1,
pageSize: 10,
total: 0
};
✅ 筛选时重置到第一页
✅ Tab切换时重置到第一页
// 分页状态
pagination: Pagination = {
page: 1,
pageSize: 10,
total: 0
};
// 页码切换处理
onPageChange(event: PageEvent): void {
this.pagination.page = event.pageIndex + 1;
this.pagination.pageSize = event.pageSize;
this.loadProducts();
}
// 加载商品时传递分页参数
loadProducts(): void {
this.loading = true;
this.productService.getProducts(this.filter, this.pagination)
.subscribe({
next: (response) => {
this.products = response.data;
this.pagination.total = response.total;
this.loading = false;
},
error: (error) => {
console.error('Failed to load products:', error);
this.showError('加载商品列表失败');
this.loading = false;
}
});
}
<!-- 工具栏显示总数 -->
<div class="toolbar-left">
<span class="product-count" *ngIf="selectedProducts.size === 0">
共 {{ pagination.total }} 个商品
</span>
</div>
<!-- 分页器 -->
<mat-paginator
*ngIf="products.length > 0"
[length]="pagination.total"
[pageSize]="pagination.pageSize"
[pageIndex]="pagination.page - 1"
[pageSizeOptions]="[10, 20, 50, 100]"
(page)="onPageChange($event)"
showFirstLastButtons>
</mat-paginator>
mat-paginator {
background: white;
border-top: 1px solid #e8e8e8;
}
✅ 所有分页相关测试通过:
should handle page change - 验证页码切换逻辑should reset to first page when applying filter - 验证筛选时重置页码✅ 手动测试验证:
✅ THE Merchant Portal SHALL display pagination controls at the bottom of the table
src/app/pages/products/product-list/product-list.component.ts - 已包含分页逻辑src/app/pages/products/product-list/product-list.component.html - 已包含分页器src/app/pages/products/product-list/product-list.component.scss - 已包含分页样式src/app/pages/products/product-list/product-list.component.spec.ts - 包含分页测试任务7.6已成功完成。商品列表分页功能已完全实现并通过测试:
分页功能与筛选、Tab切换等其他功能完美配合,提供了流畅的用户体验。