用途
本技能用于在 Angular v20+ 中创建自定义指令,实现可复用的 DOM 操作与行为扩展。
主要能力
属性指令(Attribute Directives) 用于修改元素的外观或行为。文档给出的 Highlight 示例通过 inject(ElementRef) 获取宿主元素,使用 input() 定义与选择器同名的别名输入(如 appHighlight),并在构造函数中用 effect 响应输入变化设置背景色。
使用 host 属性
相比 @HostBinding/@HostListener,推荐使用 host。Tooltip 示例在 host 中声明 (mouseenter)、(mouseleave) 事件和 [attr.aria-describedby] 属性绑定,并使用 input.required、input 定义 text 与 position 输入,运行时创建 tooltip 元素并挂载到 document.body。
类与样式操作 Button 指令示例在 host 中静态设置 class,并根据 variant()、size()、disabled() 等输入动态绑定 btn-primary、btn-sm、disabled 等类名及 attr.disabled。
事件处理
ClickOutside 指令在 host 中监听 (document:click),当点击目标不在宿主元素内时通过 output 发出 clickOutside 事件。
键盘快捷键
Shortcut 指令监听 (document:keydown),接收 key、ctrl、shift、alt 输入,匹配后调用 preventDefault 并通过 output 发出 triggered 事件。
结构指令(Structural Directives) 文档说明结构指令用于控制流之外的 DOM 操作(传送、浮层、动态插入点);条件与循环应使用原生 @if、@for、@switch。包含三个示例:Portal(将内容渲染到其他 DOM 位置,如 body)、Lazy Render(条件首次为真时一次性渲染)、Template Outlet with Context(带 $implicit、item、index 上下文的模板出口)。
宿主指令(Host Directives) 用于在组件或其他指令上组合指令。示例定义 Focusable、Disableable、Hoverable 等可复用行为指令,再通过组件的 hostDirectives 引入,可映射 inputs 与 outputs。
指令组合 API 将多个行为(如 Ripple、Elevation、Disableable)组合进一个组件。
使用方式
以 TypeScript 代码示例展示指令的定义与用法,包括 @Directive 装饰器、selector、host、input/output、inject、effect,以及模板中的使用写法(如 [appHighlight]、appTooltip、appShortcut、*appPortal、*appLazyRender、*appTemplateOutlet、hostDirectives)。
适用场景
需要在 Angular v20+ 项目中实现可复用 DOM 行为、样式与类切换、事件与快捷键处理、内容传送、懒渲染、模板出口及跨组件行为组合的场景。
限制
文档未提供具体的安装命令、依赖要求、版本兼容细节、性能数据或收费信息。高级模式被指向 references/directive-patterns.md,其内容未在本资料中展开。