- UI组件
- 前端
【免费下载链接】ng-zorro-antd
Angular UI Component Library based on Ant Design
导读
本文聚焦于 ng-zorro-antd(Angular UI 组件库)中nz-pagination分页组件的**快速跳转(Quick Jumper)**能力。该能力由nzShowQuickJumper属性开启,允许用户输入页码后直接跳转到指定页,适用于数据量大、页数多的列表场景。读完本文,你将掌握快速跳转的开启方式、与禁用态/尺寸切换等特性的组合用法、输入校验与越界处理的行为细节,并能从源码与测试层面理解其底层实现原理。
1. 快速跳转是什么
分页组件用于分隔长列表,每次只加载一个页面。当页数很多时,用户逐页点击效率极低,此时跳转输入框是最高效的导航方式:用户在输入框中键入目标页码并按下回车(Enter),分页器立即切换到该页。
在 ng-zorro-antd 的官方演示中,该场景被命名为 “跳转(Jumper)”,对应演示文档 components/pagination/demo/jump.md:
快速跳转到某一页。(Jump to a page directly.)
配套的演示组件源码位于 components/pagination/demo/jump.ts,其核心用法极为简洁:在<nz-pagination>上添加nzShowQuickJumper属性即可。
2. 快速上手:完整可运行示例
2.1 基础用法
在模块中引入NzPaginationModule(导出于 components/pagination/pagination.module.ts),然后在模板中书写:
<nz-pagination [nzPageIndex]="2" [nzTotal]="500" nzShowQuickJumper />组件类(独立组件模式,直接imports引入模块):
import { Component } from '@angular/core'; import { NzPaginationModule } from 'ng-zorro-antd/pagination'; @Component({ selector: 'nz-demo-pagination-jump', imports: [NzPaginationModule], template: ` <nz-pagination [nzPageIndex]="2" [nzTotal]="500" nzShowQuickJumper /> <br /> <nz-pagination [nzPageIndex]="2" [nzTotal]="500" nzShowQuickJumper nzDisabled /> ` }) export class NzDemoPaginationJumpComponent {}参数说明:
nzPageIndex:当前页数,可双向绑定,默认1;nzTotal:数据总数,本例为500,按默认nzPageSize="10"计算共有 50 页;nzShowQuickJumper:布尔属性,开启快速跳转输入框,默认false;nzDisabled:布尔属性,禁用整个分页器,禁用后跳转输入框同样不可输入。
渲染效果:分页条的最右侧出现形如 “跳至 ▢ 页” 的输入框(英文环境下为 “Jump to ▢ page”,文案跟随当前 i18n locale)。
2.2 与“每页条数切换”组合
快速跳转输入框和“每页条数”(Size Changer)选择器同属于分页器的“选项区”。两者可以同时开启:
<nz-pagination [nzTotal]="500" nzShowQuickJumper nzShowSizeChanger [nzPageSizeOptions]="[10, 20, 30, 40]" />3. API 与全局配置
3.1 属性定义
nzShowQuickJumper在官方 API 文档(components/pagination/doc/index.zh-CN.md / index.en-US.md)中的定义如下:
| 参数 | 说明 | 类型 | 默认值 | 全局配置 |
|---|---|---|---|---|
[nzShowQuickJumper] | 是否可以快速跳转至某页 | boolean | false | ✅ |
其中“全局配置 ✅”意味着该属性支持通过NzConfigService进行全局统一配置,无需在每个组件上重复书写。
3.2 全局配置示例
借助 ng-zorro-antd 的全局配置机制,可以在应用根组件或AppInitializer中统一开启所有分页器的快速跳转:
import { NzConfigService } from 'ng-zorro-antd/core/config'; export class AppComponent { constructor(private nzConfigService: NzConfigService) { this.nzConfigService.set('pagination', { nzShowQuickJumper: true }); } }配置键名pagination与源码中声明的模块常量一致(见 components/pagination/pagination.component.ts 中的NZ_CONFIG_MODULE_NAME: NzConfigKey = 'pagination'),属性上的@WithConfig()装饰器使其优先读取全局配置,组件级属性赋值仍可覆盖全局值。
4. 交互流程与边界行为
4.1 输入与触发
跳转输入框由NzPaginationOptionsComponent渲染(components/pagination/pagination-options.component.ts),模板片段如下:
@if (showQuickJumper) { <div class="ant-pagination-options-quick-jumper"> {{ locale.jump_to }} <input [disabled]="disabled" (keydown.enter)="jumpToPageViaInput($event)" /> {{ locale.page }} </div> }交互流程为:用户键入数字 → 按回车 → 触发jumpToPageViaInput→ 组件发出pageIndexChange事件。对应的事件处理器:
jumpToPageViaInput($event: Event): void { const target = $event.target as HTMLInputElement; const index = Math.floor(toNumber(target.value, this.pageIndex)); this.pageIndexChange.next(index); target.value = ''; }要点:
- 只响应回车键:通过
(keydown.enter)绑定,输入过程中不会实时跳页; - 非数字输入安全降级:
toNumber(来自ng-zorro-antd/core/util)对无法解析的输入回退为当前页pageIndex,即输入abc等非法内容回车后停留在当前页,不会报错; - 小数向下取整:输入
5.9会按Math.floor处理后跳转到第5页; - 输入框自动清空:跳转成功后
target.value = ''被重置,便于下一次输入。
4.2 越界与非法输入的处理
跳转事件最终汇入 components/pagination/pagination.component.ts 的onPageIndexChange:
onPageIndexChange(index: number): void { const lastIndex = this.getLastIndex(this.nzTotal, this.nzPageSize); const validIndex = this.validatePageIndex(index, lastIndex); if (validIndex !== this.nzPageIndex && !this.nzDisabled) { this.nzPageIndex = validIndex; this.nzPageIndexChange.emit(this.nzPageIndex); } }其中getLastIndex计算末页索引(Math.ceil(total / pageSize),至少为 1),validatePageIndex对输入值进行钳制:
validatePageIndex(value: number, lastIndex: number): number { if (value > lastIndex) { return lastIndex; // 超出最大页数时回落到最后一页 } else if (value < 1) { return 1; // 小于 1 时回落到第 1 页 } else { return value; } }因此,在总数为 500、每页 10 条(共 50 页)的示例中:
| 输入值 | 实际跳转结果 | 说明 |
|---|---|---|
5 | 第 5 页 | 正常跳转 |
100 | 第 50 页 | 超过最大页数,钳制到最后一页 |
0/-1 | 第 1 页 | 非法下限,钳制到第一页 |
abc | 停留在当前页 | 解析失败,回退当前页 |
5.9 | 第 5 页 | 向下取整 |
另外,onPageIndexChange中还包含两层防御:
- 重复值不触发:
validIndex !== this.nzPageIndex保证跳转到当前页不会重复发出事件; - 禁用态完全屏蔽:
!this.nzDisabled条件确保nzDisabled为真时任何跳转请求都不会生效,同时输入框本身的[disabled]绑定也会阻止输入。
4.3 简单的跳转输入框联动:页码同步
NzPaginationOptionsComponent通过pageIndexChange事件把跳转请求上抛给NzPaginationDefaultComponent(components/pagination/pagination-default.component.ts),再转发到NzPaginationComponent统一处理,最终同时更新内部nzPageIndex并触发(nzPageIndexChange)输出,实现双向绑定同步。
5. 文案与 RTL 支持
跳转框的前后缀文案(“跳至”“页” / “Jump to”“page”)取自 i18n 的Paginationlocale 数据(NzPaginationI18nInterface),随 components/i18n 语言包自动切换,无需硬编码。切换语言后,NzPaginationComponent会订阅i18n.localeChange自动刷新界面文案。
同时,在 RTL(从右到左)布局下,分页器根节点会自动挂载ant-pagination-rtl样式类(见 components/pagination/pagination.component.ts 的 host 绑定),跳转输入框的视觉顺序与图标方向随之镜像调整,无需额外处理。
6. 源码级验证:测试用例剖析
官方测试 components/pagination/pagination.spec.ts 中针对快速跳转编写了完整的用例(should showQuickJumper work),与上文行为一一对应:
- 渲染出
input元素; - 输入
5后派发keydownEnter 事件,pageIndexChange被调用一次,当前页变为 5,且输入框值被清空为空字符串; - 再次回车不重复触发(因为已跳转到当前页);
- 输入非法值
abc、负值-1、越界值10后均不会触发跳转(pageIndexChange调用次数保持不变),从测试层面证实了“非法输入安全降级 + 越界钳制”的实现细节。
此外,should nzDisabled work用例验证了nzDisabled时根元素挂载ant-pagination-disabled样式类;simple mode用例则验证了简单模式(nzSimple)下输入框直接以“当前页/总页数”形式呈现、回车同样生效的分支行为。
7. 与其他特性的协作要点
| 特性 | 与快速跳转的关系 |
|---|---|
nzShowSizeChanger | 两者共用选项区,可同时开启,互不冲突;改变每页条数会重新计算末页索引,跳转钳制随之生效 |
nzSize="small" | 缩小整体尺寸(挂载ant-pagination-mini),跳转输入框尺寸同步缩小 |
nzSimple | 简单模式下输入框形态不同(显示 “当前页/总页数”),回车同样触发跳转,但不会显示独立的 Quick Jumper 输入框 |
nzResponsive | 屏幕较窄(xs断点)时自动切换为small尺寸,不影响跳转功能 |
nzDisabled | 禁用后输入框不可编辑,且组件内部逻辑完全屏蔽跳转事件 |
nzHideOnSinglePage | 仅一页时隐藏整个分页器(含跳转框) |
8. 最佳实践建议
- 页数较多时再开启:数据量小(总页数少于 10 页)时逐页点击即可,开启跳转框反而占用横向空间;
- 配合双向绑定使用:通过
[(nzPageIndex)]双向绑定当前页,跳转后页面数据自然联动刷新; - 利用全局配置统一管理:若全站分页均需跳转能力,优先使用
NzConfigService.set('pagination', { nzShowQuickJumper: true }),避免逐组件重复声明; - 注意越界体验:输入超出范围的页码会被静默钳制到首尾页而非报错,若需要显式提示,可在
(nzPageIndexChange)回调中自行判断并给出反馈。
参考路径汇总
- 演示文档:components/pagination/demo/jump.md、components/pagination/demo/jump.ts
- 官方 API:components/pagination/doc/index.zh-CN.md、components/pagination/doc/index.en-US.md
- 核心实现:components/pagination/pagination.component.ts、components/pagination/pagination-options.component.ts、components/pagination/pagination-default.component.ts
- 类型定义:components/pagination/pagination.types.ts
- 测试用例:components/pagination/pagination.spec.ts
- UI组件
- 前端
【免费下载链接】ng-zorro-antd
Angular UI Component Library based on Ant Design
相关推荐
ng-zorro-antd Pagination 基础用法:从 `<nz-pagination>` 快速上手到源码级实现解析
ng zorro antd Pagination 基础用法:从 <nz pagination 快速上手到源码级实现解析 分页器(Pagination)是长列表数
UI组件前端SymPy 张量索引方法(Indexed 表达式)完全解析:get_indices 与 get_contraction_structure 实战指南
SymPy 张量索引方法(Indexed 表达式)完全解析:get_indices 与 get_contraction_structure 实战指南 sympy
UI组件前端塞尔达传说存档管理器:如何实现WiiU与Switch存档的无缝互转
塞尔达传说存档管理器:如何实现WiiU与Switch存档的无缝互转 BotW Save Manager是一个专门为《塞尔达传说:旷野之息》玩家设计的跨平台存档转
UI组件前端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考