PrimeVue DataTable 默认采用客户端分页,需显式启用 lazy 模式才能根据 totalRecords 渲染完整页码链接,并触发服务端分页请求。
primevue datatable 默认采用客户端分页,需显式启用 `lazy` 模式才能根据 `totalrecords` 渲染完整页码链接,并触发服务端分页请求。
在使用 PrimeVue 的 <DataTable> 组件进行服务端分页时,一个常见误区是仅设置 :totalRecords 和 :rows,却未启用懒加载(lazy loading)模式。此时组件会将传入的 :value(即 dataItems)视为全部数据,并据此计算页数——而非依据 totalRecords 进行分页控制。这导致:当 API 仅返回当前页的 5 条数据时,DataTable 错误地认为“总共只有 5 条”,因而只渲染第 1 页,无法显示其余 9 个页码链接(50 条 / 每页 5 条 = 10 页)。
✅ 正确做法是添加 :lazy="true" 属性,明确告知 DataTable 数据由远程服务按需加载:
<DataTable :value="dataItems" :lazy="true" <!-- 关键:启用懒加载 --> :paginator="true" :totalRecords="50" <!-- 服务端返回的总记录数 --> :rows="5" :page-link-size="5" <!-- 建议设为合理值(如 5),避免页码过多 --> @page="handlePagination"> <Column field="id" header="ID" /> <Column field="name" header="Name" /> <!-- 其他列定义 --></DataTable>
⚠️ 注意事项:
{ first: 5, // 当前页首条数据索引(0-based) rows: 5, // 每页条数 page: 1, // 当前页码(0-based) pageCount: 10 // 总页数 = Math.ceil(totalRecords / rows)}
总结:lazy="true" 是 PrimeVue DataTable 实现服务端分页的必要开关。它解耦了 UI 分页控件与数据源,使 totalRecords 真正驱动页码生成,并确保每次翻页都触发 @page 事件——这是构建高性能、可扩展表格分页的核心前提。
立即学习“前端免费学习笔记(深入)”;