Forms
Priority: P2 (MEDIUM)
1. Use Strictly Typed Reactive Forms
- Always use Reactive Forms over Template-Driven for complex inputs.
- Define typed
FormGroup<T>with explicit control types — never use untyped FormGroup.
See typed forms for typed FormGroup examples.
2. Extract Validation Logic
- Create standalone validator functions in a separate file.
- Sync
valueChangesto stores usingtakeUntilDestroyed().
See typed forms for standalone validator examples.
3. Ensure NonNullable Controls
- Use
fb.nonNullable.group(...)ornonNullable: trueon individual controls. - This ensures form values are always strings — avoids null in form values.
Anti-Patterns
- No Template-Driven Forms: Use Reactive Forms for any non-trivial inputs.
- No untyped FormGroup: Always use strictly typed
FormGroup<T>. - No validation in component: Extract into standalone validator functions.