Skip to content

Commit 814e404

Browse files
feat: add debounce (#47)
1 parent dd0e15f commit 814e404

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

blog/2025-10-signal-forms-part2/README.md

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: 'Angular Signal Forms Part 2: Advanced Validation and Schema Patterns'
33
author: Danny Koppenhagen and Ferdinand Malcher
44
mail: dannyferdigravatar@fmalcher.de # Gravatar
55
published: 2025-10-15
6-
lastModified: 2025-11-13
6+
lastModified: 2025-11-15
77
keywords:
88
- Angular
99
- Signals
@@ -405,6 +405,30 @@ We can use this state to provide user feedback in the UI:
405405
<!-- ... -->
406406
```
407407

408+
## Debounce: Delay updates from the UI
409+
410+
Async validation can be expensive: by default, an async call is made with every character entered in an input field.
411+
412+
The `debounce()` function delays updates from the UI to the form model.
413+
When applied, updates are only emitted to the form after typing has stopped for the given time (here 500 ms), or when the field loses focus.
414+
This means that not each and every character changes the form value and triggers validation, but only when the user has paused typing for 500 ms.
415+
416+
```typescript
417+
import { /* ... */, validateAsync, debounce } from '@angular/forms/signals';
418+
419+
export const registrationSchema = schema<RegisterFormData>((schemaPath) => {
420+
// Delay username updates by 500ms
421+
debounce(schemaPath.username, 500);
422+
423+
// Async validation will only trigger after debounce delay
424+
validateAsync(schemaPath.username, {
425+
// ...
426+
});
427+
});
428+
```
429+
430+
This prevents excessive API calls during typing and improves performance by batching rapid user input changes.
431+
408432
## Controlling Field State
409433

410434
Signal Forms also provide functions to control field behavior beyond validation.

0 commit comments

Comments
 (0)