首页/新闻资讯/正文详情

NG-ZORRO 输入框自定义计数能力完整指南:nzShowCount 与 nzCount 的配置、策略与源码原理

发布时间:2026/9/26 15:46:04 来源:云帆数科 栏目:资讯中心
NG-ZORRO 输入框自定义计数能力完整指南:nzShowCount 与 nzCount 的配置、策略与源码原理
UI组件前端【免费下载链接】ng-zorro-antdAngular UI Component Library based on Ant Design项目地址https://gitcode.com/gh_mirrors/ng/ng-zorro-antd点击查看免费下载在表单场景中输入框的字数统计并不总是数 JavaScript 字符串的 length就能满足需求emoji 在String.prototype.length中可能占 2 个码元用户却期望它按 1 个字符计数某些场景还要求允许输入超过原生maxLength的长度。NG-ZORRO 通过nzShowCount与nzCount这一对属性提供了可定制的计数能力。本文以 advance-count 示例 为核心完整讲解从开启计数、自定义计数策略、处理超限内容到源码级实现原理的实战全流程读完即可在nz-input-wrapper、nz-input-password与nz-input-search三种组件上落地任意定制计数需求。一、为什么需要定制计数能力NG-ZORRO 输入框默认的字数统计例如配合原生maxLength的nzShowCount以 JavaScript 字符串的length为准。这在以下场景中会与用户心智不一致emoji 计数偏差.length的结果是 2emoji 由代理对\uD83D\uDD25组成而产品需求通常是1 个表情算 1 个字符超出原生限制部分业务希望允许输入超过原生maxLength的值只做展示层计数而不被浏览器强制截断按业务口径统计例如按单词数、按去掉空白后的有效字符数、按 Markdown 渲染后的长度统计等。针对这类场景NG-ZORRO 在NzInputWrapperComponent上提供了两个输入属性见 input-wrapper.component.tsnzShowCount布尔开关开启后在后缀区域渲染字数统计ant-input-show-count-suffix元素nzCountNzCountConfig配置对象用于定制计数策略、上限与超限处理。二者配合即可完全接管展示计数与超限内容处理的逻辑且不依赖原生maxLength的强制截断。二、快速上手用 nzShowCount 开启字数统计最简单的用法只需在nz-input-wrapper上加上nzShowCount不需要配置nzCount。此时输入框后缀会显示当前字符数nz-input-wrapper nzShowCount input nz-input formControlNametest_0 / /nz-input-wrapper用户输入Angular NG-ZORRO时后缀会实时显示19默认按字符串length计算不显示上限。这一行为与 advance-count 示例 中的第一个表单项ShowCount完全一致。三、配置详解NzCountConfig 的三大字段NzCountConfig在 input-wrapper.component.ts 中定义共三个可选字段字段类型作用缺省行为maxnumber计数的上限值缺省为0此时后缀只显示当前值不显示/上限strategy(value: string) number自定义如何计算字符数缺省使用value.lengthexceedFormatter(value: string, config: { max: number }) string当内容超限时返回一个用于回写进输入框的格式化结果缺省返回原值即不截断、不修改从源码实现看input-wrapper.component.ts计数与展示的计算顺序为formattedValue若配置了exceedFormatter先用它处理当前值得到格式化后的值computedCount在格式化后的值上应用strategy未配置时用lengthdataCount拼接展示文本形如5/10未配置max时只显示5。四、自定义计数策略让 emoji 按 1 个字符计数当需要emoji 按 1 个字符计算时通过strategy传入自定义计数函数。示例中使用了基于扩展运算符的runes辅助函数——[...str]按 Unicode 码点迭代字符串能正确把每个 emoji 视为一个元素countStrategyFn: (v: string) number v runes(v).length; function runes(str: string): string[] { return [...str]; }模板中的用法如下对应示例的 Emoji count as length 1 表单项nz-input-wrapper nzShowCount [nzCount]{ max: 6, strategy: countStrategyFn } input nz-input formControlNametest_2 / /nz-input-wrapper当初始值为时按码点计数得到3展示为3/6而如果用默认length统计结果是6/6会误判为已到上限。测试用例同样验证了这一行为见 input-wrapper.component.spec.ts计为3/10Hello计为8/10。五、超出上限的两种处理方式5.1 允许超限仅做展示提示不配置 exceedFormatter示例的 Exceed Max 表单项展示了如何突破原生maxLength的限制nz-input-wrapper nzShowCount [nzCount]{ max: 10 } input nz-input formControlNametest_1 / /nz-input-wrapper初始值Angular NG-ZORRO的实际长度是 19超过max10但输入框不会被强制截断后缀显示19/10同时容器会被标记为ant-input-out-of-range样式类超限视觉提示见 input-wrapper.component.ts 的isOutOfRange计算逻辑与 host 绑定。这正是nzCount相比原生maxLength的关键区别max只是一个展示层上限不参与浏览器级截断。5.2 超限时自动截断配置 exceedFormatter示例的 Not exceed max 表单项演示了更完整的方案同时配置max、strategy与exceedFormatter当内容超限时把值截断回上限以内并回写输入框exceedFormatterFn: (cur: string, config: { max: number }) string (v, { max }) { const result runes(v).slice(0, max).join(); return result; };nz-input-wrapper nzShowCount [nzCount]{ max: 10, strategy: countStrategyFn, exceedFormatter: exceedFormatterFn } input nz-input formControlNametest_3 / /nz-input-wrapperexceedFormatter的入参config.max与nzCount中的max保持一致。当用户输入HelloWorld这类按码点计 15、按 length 计更多的混合文本时runes(v).slice(0, 10).join()会截取出前 10 个码点Hello并回写输入框后缀显示10/10——这一点由 input-wrapper.component.spec.ts 的exceedFormatter测试用例明确断言。六、在密码框与搜索框上使用计数能力计数能力不仅限于普通输入框。NzInputWrapperComponent的选择器同时覆盖了nz-input-wrapper、nz-input-password与nz-input-search见 input-wrapper.component.ts因此三者用法完全一致!-- 密码框隐藏眼睛切换图标开启计数与超限截断 -- nz-input-password [nzVisibilityToggle]false nzShowCount [nzCount]{ max: 20, strategy: countStrategyFn, exceedFormatter: exceedFormatterFn } input nz-input formControlNametest_4 / /nz-input-password !-- 搜索框开启计数与自定义策略 -- nz-input-search nzShowCount [nzCount]{ max: 20, strategy: countStrategyFn } input nz-input formControlNametest_5 / /nz-input-search对应示例中的 nz-input-password 与 nz-input-search 两个表单项。计数后缀会与密码可见性切换图标、清除图标nzAllowClear等后缀元素共存于ant-input-suffix区域内顺序为清除图标 → 计数后缀 → 密码切换图标见 input-wrapper.component.ts 的模板结构。七、源码原理计数如何计算与回写7.1 值从哪来NzInputWrapperComponent通过contentChild.required(NzInputDirective)拿到内部的nz-input指令并经由inputDir().value()读取当前值input-wrapper.component.ts。注释明确说明直接订阅ngControl.valueChanges会漏掉 Signal Forms其互操作NgControl不暴露valueChanges因此统一经由NzInputDirective的value计算属性读取它内部会优先读取formField状态其次回退到原生元素 value见 input.directive.ts。7.2 超限内容如何回写当formattedValue ! inputValue时组件通过this.inputDir().writeValue(formattedValue)将格式化结果写回输入框input-wrapper.component.ts。writeValue在 input.directive.ts 中实现优先写入formField状态Signal Forms否则调用ngControl?.control?.setValue(value)Reactive Forms / Template Forms。该方法的注释指出nzAllowClear与nzCount这类从控件外部改写值的特性必须走这条通道因为 Signal Forms 的互操作NgControl是只读的直接setValue会抛出错误。7.3 数值控件的兼容性一个容易踩坑的细节是当FormControl持有的是数字如typenumber时NzInputDirective会把值统一转成字符串后再暴露input.directive.ts保证计数后缀始终基于字符串语义计算。测试用例验证了FormControlnumber场景下展示5/10且控件值保持数字12345不变input-wrapper.component.spec.ts。八、完整可运行示例以下整合示例中所有表单项构成一个可直接复制运行的组件完整代码见 advance-count.tsimport { Component, inject } from angular/core; import { FormBuilder, ReactiveFormsModule } from angular/forms; import { NzFormModule } from ng-zorro-antd/form; import { NzInputModule } from ng-zorro-antd/input; Component({ selector: nz-demo-input-advance-count, imports: [ReactiveFormsModule, NzFormModule, NzInputModule], template: form nz-form [formGroup]form nzLayoutvertical nz-form-item nz-form-labelh4ShowCount/h4/nz-form-label nz-form-control nz-input-wrapper nzAllowClear nzShowCount input nz-input formControlNametest_0 / /nz-input-wrapper /nz-form-control /nz-form-item nz-form-item nz-form-labelh4Exceed Max/h4/nz-form-label nz-form-control nz-input-wrapper nzShowCount [nzCount]{ max: 10 } input nz-input formControlNametest_1 / /nz-input-wrapper /nz-form-control /nz-form-item nz-form-item nz-form-labelh4Emoji count as length 1/h4/nz-form-label nz-form-control nz-input-wrapper nzShowCount [nzCount]{ max: 6, strategy: countStrategyFn } input nz-input formControlNametest_2 / /nz-input-wrapper /nz-form-control /nz-form-item nz-form-item nz-form-labelh4Not exceed max/h4/nz-form-label nz-form-control nz-input-wrapper nzShowCount [nzCount]{ max: 10, strategy: countStrategyFn, exceedFormatter: exceedFormatterFn } input nz-input formControlNametest_3 / /nz-input-wrapper /nz-form-control /nz-form-item nz-form-item nz-form-labelh4nz-input-password/h4/nz-form-label nz-form-control nz-input-password [nzVisibilityToggle]false nzShowCount [nzCount]{ max: 20, strategy: countStrategyFn, exceedFormatter: exceedFormatterFn } input nz-input formControlNametest_4 / /nz-input-password /nz-form-control /nz-form-item nz-form-item nz-form-labelh4nz-input-search/h4/nz-form-label nz-form-control nz-input-search nzShowCount [nzCount]{ max: 20, strategy: countStrategyFn } input nz-input formControlNametest_5 / /nz-input-search /nz-form-control /nz-form-item /form }) export class NzDemoInputAdvanceCountComponent { private fb inject(FormBuilder); form this.fb.group({ test_0: [Angular NG-ZORRO], test_1: [Angular NG-ZORRO], test_2: [], test_3: [AAA], test_4: [BBB], test_5: [CCC] }); countStrategyFn: (v: string) number v runes(v).length; exceedFormatterFn: (cur: string, config: { max: number }) string (v, { max }) runes(v).slice(0, max).join(); } function runes(str: string): string[] { return [...str]; }九、实践要点总结nzShowCount只管展示nzCount管口径前者决定是否渲染计数后缀后者决定按什么口径数、上限是多少、超限怎么办max不等于maxLengthnzCount.max仅影响展示与exceedFormatter的触发不会像原生maxLength那样强制拦截输入strategy接收的是字符串即使绑定的是数字型FormControl组件也会先字符串化再交给策略函数exceedFormatter同样收到字符串超限回写统一走writeValue该通道兼容 Reactive Forms、Template Forms 与 Signal Forms不要在外部自行调用ngControl.setValue来改写受控值三种组件共用一套实现nz-input-wrapper、nz-input-password、nz-input-search的选择器都指向同一个NzInputWrapperComponent配置方式完全一致可直接迁移复用。如需查阅本主题的完整 API 说明可继续阅读 input 组件文档 中关于nzShowCount/nzCount的条目以及 input-wrapper 测试用例 中覆盖计数、策略与格式化行为的全部断言。赞分享UI组件前端【免费下载链接】ng-zorro-antdAngular UI Component Library based on Ant Design项目地址https://gitcode.com/gh_mirrors/ng/ng-zorro-antd点击查看免费下载相关推荐Atlantis 自定义策略检查custom_policy_check完整指南配置、输出解析与实现原理Atlantis 自定义策略检查custom_policy_check完整指南配置、输出解析与实现原理 Atlantis 默认使用内置的 ConftestDevOpsCI/CD基础设施NG-ZORRO Badge 组件完全指南计数徽标、状态点与 Ribbon 缎带的配置详解与源码原理NG ZORRO Badge 组件完全指南计数徽标、状态点与 Ribbon 缎带的配置详解与源码原理 Badge徽标是 NG ZORRO 中用于在通知、头UI组件前端ng-zorro-antd Anchor 自定义锚点高亮掌握 nzCurrentAnchor 的完整原理与实战ng zorro antd Anchor 自定义锚点高亮掌握 nzCurrentAnchor 的完整原理与实战 导读 在 ng zorro antd 的 AnUI组件前端上一篇iMonitor冰镜终端行为分析系统从零开始掌握系统监控利器下一篇探索PAIP-Lisp中的知识迁移从理论到实践的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Bandit B105 硬编码密码字符串检测插件(hardcoded_password_string)全面解析
Bandit B105 硬编码密码字符串检测插件(hardcoded_password_string)全面解析

SAST应用安全 【免费下载链接】bandit Bandit is a tool designed to find common security issues in Python code. 项目地址: https://gitcode.com/gh_mirrors/ba/bandit 点击查看 免费下载 导读 B105(hardcoded_password_string)是 Band… · 2026/9/26 15:46:04

Codex 写完后台表格后,我会重点验收这 4 类列:TaoToken 配置与校验清单
Codex 写完后台表格后,我会重点验收这 4 类列:TaoToken 配置与校验清单

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

InfiniBand HCA 从硬件识别到性能调优:端口状态、子网管理器与 RDMA 实践
InfiniBand HCA 从硬件识别到性能调优:端口状态、子网管理器与 RDMA 实践

1. 从“IB HCA”这个缩写说起:它到底指什么第一次看到“IB HCA”这四个字母,很多人会一头雾水。我先把这个缩写拆开讲清楚,因为搞混了它和普通网卡的区别,后面所有配置都会走偏。IB指的是 InfiniBand,一种在高性能计算… · 2026/9/26 15:45:52

AI硬件神器:小白也能实现创意实物化
AI硬件神器:小白也能实现创意实物化

1. 这不是玩具,是创意落地的物理接口“这个AI硬件神器太绝了 小白也能把创意做成实物”——这句话最近在创客圈、设计工作室甚至高校工坊里反复刷屏。我第一次听到是在深圳华强北一家专注教育硬件的小店,店主把一块巴掌大的板子往桌上一放,接… · 2026/9/26 16:27:37

手把手教你如何在 Mac 上用 OpenClaw 部署小龙虾 AI Agent:TaoToken 配置与 Node.js 环境搭建
手把手教你如何在 Mac 上用 OpenClaw 部署小龙虾 AI Agent:TaoToken 配置与 Node.js 环境搭建

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

FluentTweaker功能树详解:如何用检查-勾选-应用三步完成Windows去臃肿
FluentTweaker功能树详解:如何用检查-勾选-应用三步完成Windows去臃肿

FluentTweaker功能树详解:如何用检查-勾选-应用三步完成Windows去臃肿 【免费下载链接】FluentTweaker Windows Slop Remover 项目地址: https://gitcode.com/gh_mirrors/wi/FluentTweaker FluentTweaker(原名 Winslop)是一款基于 Win… · 2026/9/26 16:27:37

气泡浮力与流体动力学:Canvas 模拟水下气泡上升与破裂动效
气泡浮力与流体动力学:Canvas 模拟水下气泡上升与破裂动效

气泡浮力与流体动力学:Canvas 模拟水下气泡上升与破裂动效在现代 Web 互动营销、水下科幻主题大屏以及先锋液体微交互设计中,“晶莹剔透的水下气泡(Underwater Bubbles)升腾与表面张力破裂动效” 是一种能极大赋予界面生机、空灵与… · 2026/9/26 16:27:37

液体封装材料深度解析:先进封装、Underfill与国产替代机遇
液体封装材料深度解析:先进封装、Underfill与国产替代机遇

干了这么多年半导体材料相关的调研,我越来越觉得,液体封装材料是个被低估的赛道。圈内提到封装材料,第一反应通常是颗粒状的EMC(环氧塑封料),但真正到高可靠、高密度、大尺寸芯片的场景里,液态体… · 2026/9/26 16:27:37

串口分线器实战:一路物理串口如何变多路虚拟串口
串口分线器实战:一路物理串口如何变多路虚拟串口

简介:Serial Port Splitter 是一款面向串口通信场景的系统工具,适合设备调试人员和工业控制用户,用于解决物理串口数量不足及多程序争用串口数据的问题。软件通过虚拟串口技术创建多个虚拟端口,让不同应用同时分享同一物理串口&am… · 2026/9/26 16:27:31

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

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

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码