# Task 7.6 完成报告:实现商品列表分页 ## 任务概述 实现商品列表的分页功能,包括Material Paginator集成、页码切换、每页数量切换和总数显示。 ## 实现内容 ### 1. Material Paginator集成 - ✅ 在HTML模板中添加了`mat-paginator`组件 - ✅ 配置了分页器的基本属性: - `length`: 绑定到`pagination.total`(总记录数) - `pageSize`: 绑定到`pagination.pageSize`(每页显示数量) - `pageIndex`: 绑定到`pagination.page - 1`(当前页码,从0开始) - `pageSizeOptions`: 设置为`[10, 20, 50, 100]`(可选的每页数量) - `showFirstLastButtons`: 显示首页和末页按钮 ### 2. 页码切换逻辑 - ✅ 实现了`onPageChange(event: PageEvent)`方法 - ✅ 处理页码变化: ```typescript onPageChange(event: PageEvent): void { this.pagination.page = event.pageIndex + 1; this.pagination.pageSize = event.pageSize; this.loadProducts(); } ``` - ✅ 页码切换时自动重新加载商品数据 ### 3. 每页数量切换 - ✅ 支持4种每页显示数量:10、20、50、100 - ✅ 切换每页数量时自动更新`pagination.pageSize` - ✅ 切换后自动重新加载数据 ### 4. 总数显示 - ✅ 在工具栏左侧显示商品总数:`共 {{ pagination.total }} 个商品` - ✅ 分页器自动显示总页数和当前页信息 - ✅ 总数从服务端响应中获取并更新 ### 5. 分页状态管理 - ✅ 在组件中维护分页状态: ```typescript pagination: Pagination = { page: 1, pageSize: 10, total: 0 }; ``` - ✅ 筛选时重置到第一页 - ✅ Tab切换时重置到第一页 ## 技术实现 ### 组件代码(product-list.component.ts) ```typescript // 分页状态 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; } }); } ``` ### 模板代码(product-list.component.html) ```html