Use Angular Reactive Forms with `FormBuilder.nonNullable`: ```ts // profile.component.ts import { Component, inject } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { profileValidator } from './validators'; interface ProfileForm { name: FormControl<string>; email: FormControl<string>; } @Component({ // ... }) export class ProfileComponent { private readonly fb = inject(FormBuild...
Scanned 9/5/2026
Install to Claude Code
npx -y skills add HoangNguyen0403/agent-skills-standard --skill angular-forms --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Angular Forms?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/hoangnguyen0403-angular-forms-4f895aba)More formats (shields.io, HTML) on the badges page.
Use Angular Reactive Forms with `FormBuilder.nonNullable`:
```ts
// profile.component.ts
import { Component, inject } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { profileValidator } from './validators';
interface ProfileForm {
name: FormControl<string>;
email: FormControl<string>;
}
@Component({
// ...
})
export class ProfileComponent {
private readonly fb = inject(FormBuilder);
readonly form: FormGroup<ProfileForm> = this.fb.nonNullable.group({
name: ['', [Validators.required, profileValidator()]],
email: ['', [Validators.required, Validators.email]],
});
constructor() {
this.form.valueChanges
.pipe(takeUntilDestroyed())
.subscribe(value => {
// value.name and value.email are strings, never null
});
}
submit(): void {
if (this.form.valid) {
const value = this.form.getRawValue(); // { name: string; email: string }
}
}
}
```
For an individual control, use `nonNullable: true`:
```ts
const name = new FormControl('', {
nonNullable: true,
validators: [Validators.required],
});
```
Extract custom validation into a separate module:
```ts
// validators.ts
import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';
export function profileValidator(): ValidatorFn {
return (control: AbstractControl): ValidationErrors | null =>
control.value.trim().length >= 2
? null
: { profileNameTooShort: true };
}
```
`fb.nonNullable.group(...)` and `nonNullable: true` ensure controls reset to their initial values instead of `null`, and keep form values strictly typed as strings.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!