用途
Angular CDK 技能提供关于 Angular Component Dev Kit(CDK)的指导。CDK 是一组无样式的 UI 组件行为原语,用于在不依赖 Material Design 样式的前提下,构建无障碍、高质量的 Angular 组件。当需要从零构建自定义 UI 组件、实现无障碍交互、创建浮层与弹窗、构建拖放功能、处理大列表性能或实现响应式布局时,可使用本技能的规则与示例。
主要能力
技能覆盖 CDK 的核心模块:
- 无障碍(A11y):屏幕阅读器支持、键盘导航、焦点管理,包含 FocusTrap、FocusMonitor、LiveAnnouncer、FocusKeyManager 等工具。
- Overlay:浮层定位、背景(backdrop)与浮层管理,支持 flexibleConnectedTo 定位策略、滚动策略与全局居中策略。
- Portal:动态组件渲染与模板内容投影,包含 ComponentPortal 与 TemplatePortal。
- 拖放(Drag & Drop):可排序列表和跨列表拖放,使用 cdkDropList、cdkDrag 以及 moveItemInArray、transferArrayItem 等工具。
- 虚拟滚动:大数据列表的高效渲染,使用 CdkVirtualScrollViewport 并配置 itemSize 与缓冲区。
- 布局:响应式布局工具与断点观察(BreakpointObserver)。
- 表格:无样式的数据表格功能(CDK Table)。
- 树:树形层级结构(CDK Tree)。
使用方式
技能以规则和代码示例形式给出具体做法:
- 生命周期与资源管理:必须在 ngOnInit() 中通过 focusTrapFactory.create() 创建 FocusTrap 并调用 focusInitialElement();必须在 ngOnDestroy() 中销毁 FocusTrap、停止 focusMonitor 监控、销毁 keyManager,并在清理时 dispose overlayRef;必须显式释放所有 CDK 资源,不得留下未清理的 CDK 资源以免内存泄漏。
- 无障碍:必须使用 LiveAnnouncer 向屏幕阅读器播报动态内容,使用 FocusKeyManager 实现列表键盘导航。
- 浮层定位:必须使用 flexibleConnectedTo() 并至少提供两个回退定位策略;必须配置显式 scrollStrategy 与 hasBackdrop;必须通过 overlayRef.attach(portal) 附加 portal。
- Portal:动态组件渲染使用 ComponentPortal,模板内容投影使用 TemplatePortal;不再需要时必须 detach portal 以防内存泄漏。
- 拖放:必须使用 cdkDropList 容器搭配 (cdkDropListDropped) 事件处理;可拖拽项使用 cdkDrag 指令;@for 循环中使用 track 表达式;单列表重排使用 moveItemInArray();跨列表转移使用 transferArrayItem();跨列表拖拽通过 [cdkDropListConnectedTo] 连接放置列表。
- 虚拟滚动:仅在条目超过 100 时使用 CdkVirtualScrollViewport;必须设置显式 itemSize;必须配置 minBufferPx 与 maxBufferPx;必须为视口容器设置固定高度;不得使用自动高度的虚拟滚动视口。
- 断点观察:必须使用 BreakpointObserver 进行响应式布局检测;将断点 Observable 转为 signal 时使用 toSignal() 并提供 initialValue;不得直接使用 window.innerWidth、手动 resize 监听或直接调用 window.matchMedia()。
适用场景
技能列举的常见用例包括:自定义下拉菜单(Overlay + Portal)、无障碍对话框(Overlay + Focus Trap + Live Announcer)、无限滚动(Virtual Scroll Viewport)、可排序表格(CDK Table + Drag Drop)、响应式侧边栏(Breakpoint Observer + Layout)、文件树(CDK Tree)、自定义提示(Overlay + 定位策略)。
限制
资料仅提供 CDK 的行为原语指导与代码示例,不涉及具体的收费、价格或平台信息;相关未提及内容暂未提供。CDK 本身为无样式库,不提供 Material Design 视觉样式。虚拟滚动仅在列表超过 100 项时使用,且要求固定高度视口,不得使用自动高度。所有 CDK 资源必须在组件销毁时显式清理,否则可能导致内存泄漏。