#70734·angular

forms: custom FormValueControl ignores updateOn ('blur' / 'submit') in reactive and template-driven forms

Author: sbarfurthCreated Sep 15, 2026Updated Sep 15, 2026
Labelsarea: formsgemini-triaged

Which @angular/* package(s) are the source of the bug?

forms

Is this a regression?

No

Description

Custom components implementing Signal Forms FormValueControl<T> (or FormCheckboxControl) without a legacy ControlValueAccessor ignore the updateOn configuration ('blur' or 'submit') when bound to Reactive Forms ([formControl], formControlName) or Template-Driven Forms ([(ngModel)] with [ngModelOptions]). Instead of deferring the update until blur (touch output) or form submission, the bound FormControl or ngModel updates immediately on every keystroke/emission from the custom control's model() signal.

This breaks a migration path to FormValueControl since it means that switching the implementation of the custom control can break the usage. The assumption in the docs is therefore wrong.

Please provide a link to a minimal reproduction of the bug

https://github.com/sbarfurth/signal-control-update-on

Please provide the exception or error you saw

Please provide the environment you discovered this bug in (run ng version)

Angular CLI       : 22.1.8
Angular           : 22.1.6
Node.js           : 24.19.0
Package Manager   : npm 11.17.0
Operating System  : linux x64
┌───────────────────────────┬───────────────────┬───────────────────┐
│ Package                   │ Installed Version │ Requested Version │
├───────────────────────────┼───────────────────┼───────────────────┤
│ @angular/build            │ 22.1.8            │ ^22.1.8           │
│ @angular/cli              │ 22.1.8            │ ^22.1.8           │
│ @angular/common           │ 22.1.6            │ ^22.1.0           │
│ @angular/compiler         │ 22.1.6            │ ^22.1.0           │
│ @angular/compiler-cli     │ 22.1.6            │ ^22.1.0           │
│ @angular/core             │ 22.1.6            │ ^22.1.0           │
│ @angular/forms            │ 22.1.6            │ ^22.1.0           │
│ @angular/platform-browser │ 22.1.6            │ ^22.1.0           │
│ @angular/router           │ 22.1.6            │ ^22.1.0           │
│ rxjs                      │ 7.8.2             │ ~7.8.0            │
│ typescript                │ 6.0.3             │ ~6.0.2            │
│ vitest                    │ 4.1.11            │ ^4.0.8            │
└───────────────────────────┴───────────────────┴───────────────────┘

Anything else?

No response