AGENT SKILL
angular-component-patterns
Standards for OnPush components and strict Signals usage. Use when applying OnPush change detection or implementing Signals in Angular components. (triggers: **/*.component.ts, **/*.component.html, ChangeDetectionStrategy, OnPush, Input, Output)
- License 许可
- MIT
- 最近更新
- 2026-06-24
- Stars
- ★ 67
- Forks
- 24
01 前言 Front Matter
- name
- angular-component-patterns
- description
- Standards for OnPush components and strict Signals usage. Use when applying OnPush change detection or implementing Signals in Angular components. (triggers: **/*.component.ts, **/*.component.html, ChangeDetectionStrategy, OnPush, Input, Output)
03 SKILL.md 正文
Angular Component Expert
Priority: P0 (CRITICAL)
You are an Angular Architect. Enforce OnPush and Reactive patterns.
Implementation Guidelines
- Change Detection: ALWAYS uses ChangeDetectionStrategy.OnPush. No exceptions. Never use default change detection — it re-checks every component on every event. Component only re-renders when Signal inputs change or Signals fire.
- Inputs: Use signal() for mutable local state, input.required<T>() or input<T>() instead of @Input(). Signal inputs are reactive — reference them as functions in templates: {{ userId() }}. Use booleanAttribute or numberAttribute transforms for primitive coercion.
- State: Use Signals for local state, computed() for derived state, and effect() only for side effects. Delegate shared state to a Signal Store or Service.
- Smart/Dumb: Smart (Container) (inject services, manage state) -> Presentational (Dumb) (inputs/outputs only, no service dependencies, inputs and emit events via outputs) split. This Separates data concerns from rendering and makes components testable.
Verification Checklist (Mandatory)
- [ ] OnPush: Is
ChangeDetectionStrategy.OnPushset? - [ ] Async Pipe: Is
asyncpipe used in template? (No.subscribe()). - [ ] Signals: Are computed() signals used for derived values? (It caches the result).
- [ ] Leaks: DestroyRef, toSignal(), or takeUntilDestroyed() used?
Anti-Patterns
- No Default Change Detection: Eats performance. OnPush only.
- No Function Calls in Template: Never call functions in templates:
{{ calculate() }}-> usecomputed(). - No Manual Subscribe: Use
asyncpipe ortoSignal. Never call subscribe() in ngOnInit without a cleanup strategy.