
前端UI组件设计系统【免费下载链接】ant-design-blazor基于 Ant Design 与 Blazor 的前端组件库。让开发者解放生产力实现更大价值。项目地址https://gitcode.com/ant-design-blazor/ant-design-blazor点击查看免费下载导读本文聚焦 ant-design-blazor 组件库中的Tag标签组件围绕其最基础的用法展开如何在页面中渲染一个标签、如何通过Closable将其变为可关闭标签以及可关闭标签背后OnClose与OnClosing两个事件各自的触发时机与分工。读完本文你将能够在 Blazor 项目中独立完成标签渲染、点击关闭、关闭前拦截确认、受控显隐等一系列实战场景并理解这些行为在组件源码中的真实实现链路。一、基本用法一行代码渲染一个标签Tag属于数据展示类组件官方定位是进行标记和分类的小标签适合按属性或维度打标、做内容分类。组件文档 中给出的基础示例如下TagTag 1/Tag渲染结果就是一个标准样式的小标签对应 官方演示代码。标签内容通过ChildContentRenderFragment类型传入因此你不仅可以放纯文本还可以放任意其他组件或 HTML 元素Tag a href...Link/a /Tag从底层实现看Tag继承自AntDomComponentBase最终输出为一个span元素其基础 CSS 类为ant-tag。在 Tag.razor 中可以看到完整的渲染结构span classClassMapper.Class style_style idId refRef onclickClickTag if (IconTemplate ! null) { IconTemplate } else if (!string.IsNullOrEmpty(Icon)) { Icon TypeIcon ThemeIconTheme/Icon } ChildContent if (Closable) { Icon Typeclose TabIndex-1 OnClickCloseTag StopPropagationtrue / } /span这一段代码其实已经透露了Tag的全部行为脉络可选的自定义图标模板IconTemplate、可选的内置图标IconIconTheme、核心内容ChildContent以及当Closable为true时追加渲染的一个关闭图标。样式方面组件通过 index.less 提供内边距、边框、圆角、悬停过渡等视觉效果。组件测试 TagTests.razor 中的Renders_basic_tag用例印证了基础渲染结果var cut Context.Render(AntDesign.TagTag 1/AntDesign.Tag); cut.MarkupMatches(span classant-tag ant-tag-default id:ignoreTag 1/span);默认情况下即使不指定Color也会输出ant-tag-default类即默认配色。二、可关闭标签Closable 与两个关闭事件在Tag上添加布尔参数Closable默认值false见 Tag.razor.cs标签右侧就会多出一个关闭图标点击后标签从页面移除Tag ClosableTag 2/Tag可关闭标签拥有两个事件它们名字相近但职责完全不同事件参数类型触发时机典型用途OnClosingCloseEventArgsMouseEventArgs点击关闭图标后、真正移除之前拦截/取消关闭、播放退场动画OnCloseMouseEventArgs确认关闭并移除之后执行删除数据、写日志等收尾动作这个先OnClosing、后OnClose的顺序并非约定俗成而是被源码硬编码的。查看 Tag.razor.cs 中的CloseTag方法private async Task CloseTag(MouseEventArgs e) { var closeEvent new CloseEventArgsMouseEventArgs(e); if (OnClosing.HasDelegate) { await this.OnClosing.InvokeAsync(closeEvent); } if (closeEvent.Cancel) { return; } this._closed true; if (OnClose.HasDelegate) { await this.OnClose.InvokeAsync(e); } }调用链非常清晰先触发OnClosing若closeEvent.Cancel为true则直接return标签保持可见OnClose也不会被触发只有未被取消时才会置_closed true并触发OnClose。而在 Tag.razor 的顶层正是通过if (!_closed)控制整个span的渲染_closed置位后标签随即从 DOM 中消失。值得注意的是关闭图标使用StopPropagationtrue点击关闭按钮不会冒泡触发标签自身的OnClick——这一点也有对应的测试用例Click_on_close_does_not_invoke_OnClick加以验证。三、用 OnClosing 拦截关闭Cancel 属性实战CloseEventArgsT是组件库通用的事件参数类型定义在 CloseEventArgs.cspublic class CloseEventArgsT where T : EventArgs { public CloseEventArgs(T eventArgs) { EventArgs eventArgs; } public T EventArgs { get; set; } /// summary /// If true, the component will be prevented from closing /// /summary public bool Cancel { get; set; } }其中Cancel属性专用于条件性阻止关闭。基础演示中通过OnClosing实现禁止关闭的写法Tag Closable OnClosingPreventDefaultPrevent Default/Tag code { void PreventDefault(CloseEventArgsMouseEventArgs closeArgs) { closeArgs.Cancel true; } }只要在OnClosing里把Cancel置为true无论OnClose是否绑定标签都不会被移除。这一行为在 TagTests.razor 的Prevents_tag_closing用例中得到验证点击关闭图标后标签的完整 DOM 结构依然存在。更贴近真实业务的是关闭前弹窗确认模式参考 Event.razor 与 Event.mdinject IConfirmService _confirmService Tag Closable OnClosingasync e await onClosing(e) OnCloseonCloseonClosing/Tag code { async Task onClosing(CloseEventArgsMouseEventArgs e) { var result await _confirmService.Show(Do you confirm to close this tag?, Confirm); e.Cancel result ConfirmResult.Cancel; } void onClose() { // 用户确认后才会执行到这里 } }由于OnClosing是异步事件可以在其中 await 一个确认对话框再根据用户选择决定是否置Cancel从而实现确认后才真正关闭的交互。四、从基础到进阶围绕 Tag 的扩展能力一览Basic.md展示的是入口但Tag组件的完整能力不止于此官方文档目录 Tag demo 列表 中还有其他演示这里挑选与基础用法最相关的能力做简要串联帮助你理解同一组件在不同场景下的延伸多彩标签ColorfulColor参数支持两种赋值方式。一是预设枚举 TagColor.csred、green、blue、gold等 14 种常规色及其-inverse反色变体二是任意颜色字符串。在 Tag.razor.cs 的ResolveColorStrInput中可以看到解析逻辑以#开头或rgb(开头会被识别为自定义色通过background-color内联样式直接着色否则会先去预设色映射表里做不区分大小写的匹配匹配不上再按自定义色处理。预设状态色StatusTag将Color设为success、processing、error、warning、default即可表达不同业务状态样式上由 index.less 中的make-status-color-classes混合宏生成对应 CSS 类。可选中标签Checkable设置Checkable后点击标签会在选中/未选中间切换行为类似 Checkbox。注意 Checkable.md 特别说明这是完全受控组件——Checked值必须由父组件管理通过CheckedChanged回调接收变更。源码层面由 Tag.razor.cs 的UpdateCheckedStatus负责翻转状态并回调。受控显隐ControlledVisible参数默认true可完全由外部控制标签是否显示置false时组件追加ant-tag-hidden类display: none演示见 Controlled.razor。它与内部_closed是两条独立的显隐通道测试用例Renders_basic_tag_invisible验证了Visiblefalse时输出ant-tag-hidden类。动态增删Dynamic用集合驱动渲染一组标签配合OnClose从集合中移除、OnClick唤起输入框新增即完整的标签管理场景见 Dynamic.razor。图标与双色Icon / TwoToneIcon参数快速附加一个图标IconTemplate则允许自定义图标区渲染任意内容两者都在 Tag.razor 中有对应分支双色标签的实现可参考 TwoTone.razor。五、常用参数速查表以下参数均来自 Tag.razor.cs 的属性定义与官方 API 表一致参数类型默认值说明ChildContentRenderFragment-标签内容Closableboolfalse是否可关闭为true时显示关闭图标Checkableboolfalse是否可选择点击切换选中态Checkedboolfalse受控选中状态需配合CheckedChanged使用CheckedChangedEventCallbackbool-选中态变化回调ColorOneOfTagColor, stringTagColor.Default预设枚举色或自定义颜色字符串Iconstring-设置图标类型名IconThemeIconThemeTypeOutline图标风格IconTemplateRenderFragment-自定义图标区模板优先于Icon渲染OnClickEventCallback-点击标签回调点击关闭图标时不触发OnCloseEventCallbackMouseEventArgs-标签关闭完成后的回调OnClosingEventCallbackCloseEventArgsMouseEventArgs-关闭前的回调可用Cancel取消关闭Visiblebooltrue是否显示标签其中Closable、Visible、Checkable、Checked的默认值均在 Tag.razor.cs 的[Parameter]属性上直接标注Color的预设映射表_colorMap完整罗列了 38 种可用枚举值及其对应 CSS 类名可在源码中逐一核对。结语Tag是 ant-design-blazor 中上手成本最低的组件之一但基本用法背后蕴含的事件编排并不简单Closable打开关闭能力OnClosing负责拦截与决策OnClose负责收尾二者由CloseEventArgs.Cancel串联成一条严谨的调用链。本文结合 Tag.razor、Tag.razor.cs 与 TagTests.razor 还原了这条链路你可以直接在 Basic.razor 基础上动手实践把标签真正用进自己的业务界面。赞分享前端UI组件设计系统【免费下载链接】ant-design-blazor基于 Ant Design 与 Blazor 的前端组件库。让开发者解放生产力实现更大价值。项目地址https://gitcode.com/ant-design-blazor/ant-design-blazor点击查看免费下载相关推荐Ant Design 标签Tag组件实战基本展示与可关闭标签的完整用法Ant Design 标签Tag组件实战基本展示与可关闭标签的完整用法 标签Tag是 Ant Design 中用于“标记和分类”的轻量级展示组件适合UI组件前端设计系统Ant Design Blazor 中 Tabs 组件关闭标签页异常问题解析Ant Design Blazor 中 Tabs 组件关闭标签页异常问题解析 引言标签页关闭的痛点 在日常的企业级应用开发中标签页Tabs组件是管理多视前端UI组件设计系统基于 Ant Design Blazor 的 Alert 组件自定义关闭按钮详解基于 Ant Design Blazor 的 Alert 组件自定义关闭按钮详解 本文基于 Ant Design Blazor 开源仓库中 Alert 组件的前端UI组件设计系统上一篇如何用 FieldTrip 跑通第一条 EEG 分析流水线从原始数据到统计图下一篇ImageStrike 隐写分析工具17 种图片隐写方法挂进同一个下拉菜单创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考