AN

angular-forms

Handles form creation, validation, and reactive logic in Angular applications.

Install

mkdir -p .claude/skills/angular-forms && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/11511" && unzip -o skill.zip -d .claude/skills/angular-forms && rm skill.zip

Installs to .claude/skills/angular-forms

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

ALWAYS use when working with Angular Forms, reactive forms, template-driven forms, form validation, or form handling in Angular applications.
141 chars✓ has a “when” trigger
Beginner

Key capabilities

  • Create reactive forms with validation.
  • Implement functional validators for form fields.
  • Manage complex form groups and arrays.
  • Handle form submission and data retrieval.
  • Control form field states like disabled or touched.

How it works

The skill provides utilities for managing Angular forms, including reactive forms, template-driven forms, and validation, using the `@angular/forms` module.

Inputs & outputs

You give it
Form definition and validation rules
You get back
Angular forms with managed state and validation

When to use angular-forms

  • Create reactive forms with validation
  • Implement functional validators
  • Manage complex form groups and arrays

About this skill

@angular/forms

Version: Angular 21 (2025) Tags: Forms, Validation, Reactive Forms, Template-Driven

References: Reactive FormsTemplate-DrivenAPI

API Changes

This section documents recent version-specific API changes.

  • NEW: Signal-based form controls — Angular 19+ signal integration for form controls

  • NEW: Functional validators — Prefer functional validators over class-based validators

  • NEW: AbstractControl.markAllAsTouched() — New method to mark all controls as touched

  • NEW: nonNullable option — Create non-nullable FormControls

  • NEW: Typed forms — Full TypeScript support for form groups and arrays

  • DEPRECATED: Class-based validators — Migrate to functional validators

Best Practices

  • Use Reactive Forms for complex forms — Better structure, validation, and testability
import { FormBuilder, Validators, ReactiveFormsModule } from '@angular/forms';

@Component({
  standalone: true,
  imports: [ReactiveFormsModule],
  template: `
    <form [formGroup]="form" (ngSubmit)="onSubmit()">
      <input formControlName="email" />
      <div *ngIf="form.controls.email.invalid && form.controls.email.touched">
        Email is required
      </div>
    </form>
  `
})
export class LoginComponent {
  private fb = inject(FormBuilder);
  
  form = this.fb.nonNullable.group({
    email: ['', [Validators.required, Validators.email]],
    password: ['', [Validators.required, Validators.minLength(8)]]
  });

  onSubmit() {
    if (this.form.valid) {
      console.log(this.form.getRawValue());
    }
  }
}
  • Use FormBuilder for cleaner code
form = this.fb.group({
  name: ['', Validators.required],
  email: ['', [Validators.required, Validators.email]],
  address: this.fb.group({
    street: [''],
    city: ['']
  })
});
  • Use custom validators for complex logic
// Functional validator (preferred)
const forbiddenNameValidator = (control: AbstractControl): ValidationErrors | null => {
  const forbidden = ['admin', 'root', 'superuser'];
  return forbidden.includes(control.value) ? { forbiddenName: true } : null;
};

// Usage
name: ['', forbiddenNameValidator]
  • Use async validators for server-side validation
email: ['', 
  [Validators.email], 
  [asyncValidator, { debounceTime: 300 }]
]
  • Use FormArray for dynamic form fields
const form = this.fb.group({
  emails: this.fb.array([
    this.fb.control('')
  ])
});

get emails(): FormArray {
  return this.form.get('emails') as FormArray;
}

addEmail() {
  this.emails.push(this.fb.control(''));
}
  • Use updateOn option for performance
// Only validate on blur
email: ['', { updateOn: 'blur' }]

// Only validate on submit
password: ['', { updateOn: 'submit' }]
  • Show validation errors conditionally
<input formControlName="email" 
       [class.is-invalid]="email.invalid && (email.dirty || email.touched)" />
  • Use disable() for conditionally disabled fields
// Disable based on another control
this.form.statusChanges.subscribe(() => {
  if (this.form.value.isAdmin) {
    this.form.controls.permissions.enable();
  } else {
    this.form.controls.permissions.disable();
  }
});
  • Reset form properly
// Reset with default values
this.form.reset({ email: '', name: 'Default' });

// Reset and clear validators
this.form.reset();
this.form.clearValidators();

When not to use it

  • When working with forms in non-Angular applications.

Limitations

  • Applicable only to Angular applications.

How it compares

This skill offers structured, framework-specific tools for form management, contrasting with manual DOM manipulation or generic JavaScript form handling.

Compared to similar skills

angular-forms side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
angular-forms (this skill)05moNo flagsBeginner
angular1004moReviewAdvanced
angular-state-management84moNo flagsIntermediate
angular-modernization48moReviewIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

You might also like

angular

sickn33

Modern Angular (v20+) expert with deep knowledge of Signals, Standalone Components, Zoneless applications, SSR/Hydration, and reactive patterns. Use PROACTIVELY for Angular development, component architecture, state management, performance optimization, and migration to modern patterns.

100129

angular-state-management

sickn33

Master modern Angular state management with Signals, NgRx, and RxJS. Use when setting up global state, managing component stores, choosing between state solutions, or migrating from legacy patterns.

823

angular-modernization

bitwarden

Modernizes Angular code such as components and directives to follow best practices using both automatic CLI migrations and Bitwarden-specific patterns. YOU must use this skill when someone requests modernizing Angular code. DO NOT invoke for general Angular discussions unrelated to modernization.

422

angular-routing

analogjs

Implement routing in Angular v20+ applications with lazy loading, functional guards, resolvers, and route parameters. Use for navigation setup, protected routes, route-based data loading, and nested routing. Triggers on route configuration, adding authentication guards, implementing lazy loading, or reading route parameters with signals.

14

igniteui-angular-grids

igniteui

Provides guidance on all Ignite UI for Angular data grid types (Flat Grid, Tree Grid, Hierarchical Grid, Grid Lite, Pivot Grid) including setup, column configuration, sorting, filtering, selection, editing, grouping, summaries, toolbar, export, paging, remote data, and state persistence. Use when users ask about grids, tables, data grids, tabular data display, cell editing, batch editing, row selection, column pinning, column hiding, grouping rows, pivot tables, tree-structured data, hierarchical data, master-detail views, or exporting grid data.

14

igniteui-angular-components

igniteui

Provides guidance on all non-grid Ignite UI for Angular UI components including application setup and architecture, form controls (Input Group, Combo, Select, Date/Time Pickers, Calendar, Checkbox, Radio, Switch, Slider, reactive forms), layout (Tabs, Bottom Navigation, Stepper, Accordion, Splitter, Navigation Drawer, Layout Manager), data display (List, Tree, Card, Chips, Avatar, Badge, Icon, Carousel, Paginator, Progress Bar, Linear Progress Bar, Circular Progress Bar, Chat), feedback/overlays (Dialog, Snackbar, Toast, Banner), directives (Button, Ripple, Tooltip, Drag and Drop), Dock Manager, and Charts (Area Chart, Bar Chart, Column Chart, Stock/Financial Chart, Pie Chart, IgxCategoryChart, IgxFinancialChart, IgxDataChart, IgxPieChart). Use when users ask about any Ignite UI Angular component that is not a data grid, such as forms, inputs, dropdowns, date pickers, dialogs, navigation, lists, trees, cards, charts, or application scaffolding and setup.

12

Search skills

Search the agent skills registry