ng-zorro-antd Checkbox 多选框组件完全指南:API 详解、源码原理与实战示例

发布时间:2026/9/25 2:32:41

ng-zorro-antd Checkbox 多选框组件完全指南:API 详解、源码原理与实战示例 UI组件前端【免费下载链接】ng-zorro-antdAngular UI Component Library based on Ant Design项目地址https://gitcode.com/gh_mirrors/ng/ng-zorro-antd点击查看免费下载ng-zorro-antd 是 Angular 生态下基于 Ant Design 设计语言的 UI 组件库其 Checkbox多选框组件用于在一组可选项中进行多项选择或单独使用表示两种状态之间的切换。本指南以官方文档为核心结合仓库源码与测试用例系统讲解nz-checkbox、nz-checkbox-group的完整 API、双向绑定、禁用与半选indeterminate状态、全选联动以及表单集成的底层实现帮助你在真实项目中快速落地并理解其运行机制。何时使用 Checkbox根据官方文档 components/checkbox/doc/index.zh-CN.mdCheckbox 适合在以下两种场景中使用一组可选项中进行多项选择例如权限配置、兴趣标签、多条件筛选用户可同时勾选多个选项最终值与提交操作配合单独使用表示两种状态之间的切换功能上与switch类似但两者有本质区别——切换switch会直接触发状态改变而checkbox一般用于状态标记需要和提交操作配合使用即用户勾选后仍需通过按钮等操作提交。API 详解[nz-checkbox] 单选 Checkboxnz-checkbox是一个属性型选择器selector 为[nz-checkbox]通常直接作用于label元素上声明为exportAs: nzCheckbox。其完整输入输出参数如下参数说明类型默认值[nzId]组件内部 input 的id值string-[nzName]组件内部 input 的name值string-[nzAutoFocus]自动获取焦点booleanfalse[nzDisabled]设定 disable 状态booleanfalse[ngModel]指定当前是否选中可双向绑定booleanfalse[nzIndeterminate]设置 indeterminate 状态只负责样式控制booleanfalse[nzValue]仅与nz-checkbox-wrapper即 group 内部的选中回调配合使用any-(ngModelChange)选中变化时回调EventEmitterboolean-从源码 checkbox.component.ts 可以看到nzAutoFocus、nzDisabled、nzIndeterminate、nzChecked均通过booleanAttribute变换函数接收输入因此模板中可以简写为label nz-checkbox nzDisabled而不必显式传值。方法名称描述focus()获取焦点blur()移除焦点这两个方法的底层实现见 checkbox.component.tsfocus()借助angular/cdk/a11y的FocusMonitor.focusVia(this.inputElement, keyboard)以键盘方式聚焦到内部 inputblur()直接调用原生 input 的blur()。测试用例 checkbox.spec.ts 验证了调用focus()后document.activeElement即为内部 input调用blur()后焦点移除。基本用法示例最简单的用法来自官方 demo basic.ts使用[(ngModel)]双向绑定import { Component, signal } from angular/core; import { FormsModule } from angular/forms; import { NzCheckboxModule } from ng-zorro-antd/checkbox; Component({ selector: nz-demo-checkbox-basic, imports: [FormsModule, NzCheckboxModule], template: label nz-checkbox [(ngModel)]checkedCheckbox/label }) export class NzDemoCheckboxBasicComponent { readonly checked signal(true); }受控与非受控切换官方 demo controller.ts 展示了如何用外部按钮控制勾选与禁用状态Component({ selector: nz-demo-checkbox-controller, imports: [FormsModule, NzButtonModule, NzCheckboxModule], template: label nz-checkbox [(ngModel)]checked [nzDisabled]disabled() {{ checked() ? Checked : Unchecked }} - {{ disabled() ? Disabled : Enabled }} /label br /br / button nz-button nzTypeprimary (click)toggleChecked() nzSizesmall {{ checked() ? Uncheck : Check }} /button button nz-button nzTypeprimary (click)toggleDisabled() nzSizesmall {{ disabled() ? Enable : Disable }} /button }) export class NzDemoCheckboxControllerComponent { readonly checked signal(true); readonly disabled signal(false); toggleChecked(): void { this.checked.update(checked !checked); } toggleDisabled(): void { this.disabled.update(disabled !disabled); } }禁用态官方 demo disabled.ts 展示未选中与已选中两种禁用场景Component({ selector: nz-demo-checkbox-disabled, imports: [FormsModule, NzCheckboxModule], template: label nz-checkbox nzDisabled [ngModel]false/label br / label nz-checkbox nzDisabled [ngModel]true/label }) export class NzDemoCheckboxDisabledComponent {}nz-checkbox-group 复选框组nz-checkbox-groupselector 为nz-checkbox-groupexportAs: nzCheckboxGroup用于管理一组同义选项的多选值。其参数如下参数说明类型默认值[ngModel]指定可选项可双向绑定string[] \| number[][][nzName]CheckboxGroup 下所有 input 的name属性string-[nzOptions]指定可选项string[] \| number[] \| NzCheckboxOption[][][nzDisabled]设定全部 checkbox disable 状态booleanfalse(ngModelChange)选中数据变化时的回调EventEmitterstring[] \| number[]-从源码 checkbox-group.component.ts 可以看到nzName、nzDisabled、nzOptions均以 Angular 信号signal形式声明组件内部通过linkedSignal实现finalDisabled确保「表单控件禁用」与「nzDisabled属性禁用」二者合一。InterfacesNzCheckboxOptionnzOptions除了可以接收string[] | number[]的简写形式外还支持结构化配置对象export interface NzCheckboxOption { label: string; value: string | number; disabled?: boolean; }该接口定义于 checkbox-group.component.ts。当传入纯字符串或数字数组时组件内部的normalizeOptions()会将其规范化为{ label: value, value }形式见 checkbox-group.component.ts因此三种写法等价// 写法一纯字符串数组 options [Apple, Pear, Orange]; // 写法二纯数字数组 options [1, 2, 3]; // 写法三结构化配置支持单独禁用某一项 options: NzCheckboxOption[] [ { label: Apple, value: Apple }, { label: Pear, value: Pear }, { label: Orange, value: Orange, disabled: true } ];实战示例复选框组基本用法官方 demo group.ts 展示了 group 的标准用法包括多组复用、结构化禁用与整体禁用import { Component, signal } from angular/core; import { FormsModule } from angular/forms; import { NzCheckboxModule, NzCheckboxOption } from ng-zorro-antd/checkbox; Component({ selector: nz-demo-checkbox-group, imports: [FormsModule, NzCheckboxModule], template: nz-checkbox-group [nzOptions]options1 [(ngModel)]value (ngModelChange)log($event) / br /br / nz-checkbox-group [nzOptions]options2 [(ngModel)]value (ngModelChange)log($event) / br /br / nz-checkbox-group nzDisabled [nzOptions]options3 [(ngModel)]value (ngModelChange)log($event) / }) export class NzDemoCheckboxGroupComponent { readonly options1: NzCheckboxOption[] [ { label: Apple, value: Apple }, { label: Pear, value: Pear }, { label: Orange, value: Orange } ]; readonly options2: NzCheckboxOption[] [ { label: Apple, value: Apple }, { label: Pear, value: Pear }, { label: Orange, value: Orange, disabled: true } ]; readonly options3: NzCheckboxOption[] [ { label: Apple, value: Apple }, { label: Pear, value: Pear }, { label: Orange, value: Orange } ]; readonly value signal([Apple]); log(value: string[]): void { console.log(value); } }其中第三组使用了属性简写nzDisabled等价于[nzDisabled]true。测试用例 checkbox-group.spec.ts 验证了 options 为对象数组、数字数组、字符串数组三种形态时均能正确渲染出对应 label 文本。全选与半选indeterminate联动nzIndeterminate只负责样式控制不参与选中语义这是实现「全选 / 半选」联动的基础。官方 demo check-all.ts 给出了完整实现import { Component, computed, signal } from angular/core; import { FormsModule } from angular/forms; import { NzCheckboxModule, NzCheckboxOption } from ng-zorro-antd/checkbox; import { NzDividerModule } from ng-zorro-antd/divider; Component({ selector: nz-demo-checkbox-check-all, imports: [FormsModule, NzCheckboxModule, NzDividerModule], template: label nz-checkbox [ngModel]allChecked() (ngModelChange)onAllCheckedChange($event) [nzIndeterminate]indeterminate() Check all /label nz-divider / nz-checkbox-group [nzOptions]options [(ngModel)]value / }) export class NzDemoCheckboxCheckAllComponent { readonly value signalArrayNzCheckboxOption[value]([Apple, Orange]); readonly options: NzCheckboxOption[] [ { label: Apple, value: Apple }, { label: Pear, value: Pear }, { label: Orange, value: Orange } ]; readonly allChecked computed(() this.value().length this.options.length); readonly indeterminate computed(() this.value().length 0 !this.allChecked()); onAllCheckedChange(checked: boolean): void { this.value.set(checked ? this.options.map(item item.value) : []); } }这里的核心逻辑值得留意allChecked()通过computed派生当已选数量等于选项总数时为全选indeterminate()当已选数量大于 0 且未全选时为真此时顶部 Checkbox 显示为「横杠」半选样式点击顶部 Checkbox 后onAllCheckedChange根据结果一次性设置全部或清空值。从源码角度验证在 checkbox.component.ts 的模板中ant-checkbox-checked样式类仅在nzChecked !nzIndeterminate时生效ant-checkbox-indeterminate单独由nzIndeterminate控制——这印证了「半选只控制样式、不参与选中状态」的设计。测试 checkbox.spec.ts 也验证了设置为nzIndeterminate后 wrapper 会带上ant-checkbox-indeterminate类。自定义布局在 group 中内嵌任意子元素官方 demo layout.ts 展示了另一种高级用法nz-checkbox-group除了nzOptions数据驱动方式外还支持投影内容ng-content自定义布局让nzValue与布局解耦import { Component } from angular/core; import { FormsModule } from angular/forms; import { NzCheckboxModule } from ng-zorro-antd/checkbox; import { NzGridModule } from ng-zorro-antd/grid; Component({ selector: nz-demo-checkbox-layout, imports: [FormsModule, NzCheckboxModule, NzGridModule], template: nz-checkbox-group ngModelA [style.width.%]100 nz-row nz-col nzSpan8 label nz-checkbox nzValueAA/label /nz-col nz-col nzSpan8 label nz-checkbox nzValueBB/label /nz-col nz-col nzSpan8 label nz-checkbox nzValueCC/label /nz-col nz-col nzSpan8 label nz-checkbox nzValueDD/label /nz-col nz-col nzSpan8 label nz-checkbox nzValueEE/label /nz-col /nz-row /nz-checkbox-group }) export class NzDemoCheckboxLayoutComponent {}这里的nzValue就是为这种场景设计的group 模板通过ng-content投影子元素见 checkbox-group.component.ts每个投影进来的nz-checkbox将nzValue上报给 groupgroup 据此维护选中值集合。测试 checkbox-group.spec.ts 验证了点击自定义布局中的复选框时group 的绑定值会正确增删对应nzValue。源码级原理剖析双向绑定与控制值访问器CVAnz-checkbox与nz-checkbox-group都实现了ControlValueAccessor接口以NG_VALUE_ACCESSOR多提供者形式注册见 checkbox.component.ts 与 checkbox-group.component.ts。这意味着它们不仅能配合模板表单的ngModel还能直接接入响应式表单Component({ imports: [ReactiveFormsModule, NzCheckboxModule], template: label nz-checkbox [formControl]formControl/label }) export class DemoComponent { formControl new FormControl(false); }组件通过writeValue()接收外部值、registerOnChange()注册变更回调、registerOnTouched()注册触摸回调。测试 checkbox.spec.ts 专门覆盖了响应式表单场景表单禁用时组件同步进入禁用态且禁用状态下点击不会改变FormControl的值。组件的内部联动机制单个nz-checkbox通过注入NZ_CHECKBOX_GROUP令牌定义于 tokens.ts感知自己是否处于 group 内group 内在构造函数中通过effect监听 group 的value信号若value.includes(this.nzValue)则自动同步选中态checkbox.component.ts点击上报用户点击后innerCheckedChange会调用checkboxGroupComponent.onCheckedChange(this.nzValue, checked)group 根据结果把nzValue追加或过滤出选中值数组checkbox-group.component.ts禁用合并finalDisabled由linkedSignal派生nz-checkbox的模板同时判断自身nzDisabled与 group 的finalDisabledcheckbox.component.ts。事件处理与变更检测优化组件对点击事件做了精细处理checkbox.component.tswrapper 上的点击事件通过fromEventOutsideAngular订阅在 Angular Zone 之外监听命中禁用态时直接preventDefault返回避免无意义的变更检测内部 input 的点击事件stopPropagation防止事件冒泡造成重复触发状态变化后通过ngZone.run()手动回到 Zone 内执行变更检测。测试 checkbox.spec.ts 验证了这些优化点击内部 input 不会触发ApplicationRef.tick()禁用态点击 wrapper 也不会触发变更检测从而保证高频交互下的性能。样式类与 RTL 支持组件渲染的 DOM 结构为ant-checkbox-wrapper ant-checkbox (ant-checkbox-input ant-checkbox-inner) 投影文本选中、禁用、半选分别对应ant-checkbox-checked、ant-checkbox-disabled、ant-checkbox-indeterminate样式类见 checkbox.spec.ts。同时两个组件都注入Directionality在 RTL 环境下自动添加ant-checkbox-rtl/ant-checkbox-group-rtl类样式文件位于 style/index.less。集成与使用前提NzCheckboxModule定义于 checkbox.module.ts导出NzCheckboxComponent与NzCheckboxGroupComponent已并入组件库的公开 API可通过 public-api.ts 从ng-zorro-antd/checkbox导入。由于组件依赖ngModel/formControl等表单能力使用时需同步引入FormsModule或ReactiveFormsModule。模块引入方式import { NgModule } from angular/core; import { FormsModule } from angular/forms; import { NzCheckboxModule } from ng-zorro-antd/checkbox; NgModule({ imports: [FormsModule, NzCheckboxModule] }) export class DemoModule {}小结单选label nz-checkbox [(ngModel)]checked即可获得完整选中语义nzIndeterminate专门用于半选样式常与「全选」联动多选nz-checkbox-group支持数据驱动nzOptions与投影布局ng-contentnzValue两种模式nzOptions支持字符串、数字、结构化对象三种形态表单两个组件均实现ControlValueAccessor可无缝对接ngModel与响应式表单禁用态由「属性禁用 表单禁用」合并控制原理group 通过NZ_CHECKBOX_GROUP注入令牌与信号联动实现值同步事件在 Zone 外监听并手动回 Zone 执行变更检测兼顾正确性与性能。以上内容均可在仓库源码与测试用例中得到验证读者可结合 components/checkbox 目录下的实现与 spec 文件继续深入。赞分享UI组件前端【免费下载链接】ng-zorro-antdAngular UI Component Library based on Ant Design项目地址https://gitcode.com/gh_mirrors/ng/ng-zorro-antd点击查看免费下载相关推荐ng-zorro-antd Checkbox 组件完全指南API、源码原理与全选/半选实战ng zorro antd Checkbox 组件完全指南API、源码原理与全选/半选实战 ng zorro antd 是基于 Ant Design 设计体系UI组件前端如何利用Upptime实现智能故障检测全面监控策略指南如何利用Upptime实现智能故障检测全面监控策略指南 Upptime是一款由GitHub Actions、Issues和Pages驱动的开源正常运行时间监控UI组件前端Ant Design Checkbox 多选框组件完全指南API、Checkbox.Group、全选模式与源码原理剖析Ant Design Checkbox 多选框组件完全指南API、Checkbox.Group、全选模式与源码原理剖析 Checkbox多选框是 Ant前端UI组件设计系统上一篇Adele - 设计系统仓库项目推荐下一篇深度解析vis-three框架如何构建企业级3D场景编辑器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/25 4:27:45

C语言实现斐波那契数列:三大方法与溢出排查实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 20:24:47

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/25 0:02:35

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:02:35

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:02:35

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑