Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problemsAngular error NG01354 means an ngModel control inside a child component cannot register with the form in its parent component. To include the control in that form, expose the parent’s form directive through the child component’s viewProviders: use NgForm for a template-driven form or FormGroupDirective for a reactive form. If the control should be independent, mark it standalone instead.
Why NG01354 happens
Angular’s NgModel looks for a form container by injecting ControlContainer with @Host(). That host boundary prevents the lookup from crossing a component boundary. If a parent component owns the form and a child component owns the input, the child’s ngModel cannot see the parent form directive and cannot register with it.
As an Amazon Associate I earn from qualifying purchases.
The child control consequently does not participate in the parent form’s value, validity, or submission state. This is a component-boundary registration problem, not necessarily a misspelled model binding. See Angular’s NG01354 documentation.
Make the child control part of the parent form
Expose the form directive that matches the parent’s form style through the child component’s viewProviders. Import the named classes from @angular/forms.
#1 Best Overall
For a template-driven parent form
If the parent uses a regular template-driven <form> handled by NgForm, add this provider to the child component:
import { ControlContainer, NgForm } from '@angular/forms';
@Component({
// ...
viewProviders: [
{ provide: ControlContainer, useExisting: NgForm }
]
})
export class ChildComponent {}
This lets the child’s ngModel resolve the parent’s NgForm and register with it.
Rank #2
For a reactive parent form
If the parent uses [formGroup], expose FormGroupDirective instead:
import { ControlContainer, FormGroupDirective } from '@angular/forms';
@Component({
// ...
viewProviders: [
{ provide: ControlContainer, useExisting: FormGroupDirective }
]
})
export class ChildComponent {}
Use the directive corresponding to the parent form. A template-driven form uses NgForm; a reactive form uses FormGroupDirective. Angular documents that this allows child controls to be seen and validated by the parent form.
Rank #3
Keep the control independent instead
If the input should not contribute to the parent form, opt it out explicitly with standalone mode:
<input [(ngModel)]="value" [ngModelOptions]="{standalone: true}">
This makes the control independent; it does not register the control with the parent form. Choose it only when exclusion from the parent’s value, validity, and submission state is intended.
Rank #4
Check which component owns the form and control
-
Use the NG01354 warning’s call stack to find the
ngModelthat triggered the error.Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy. -
Identify which component owns the
<form>element and which component owns the input. -
If they are different components and the input belongs in the parent form, add the matching
ControlContainerprovider to the child. -
If the input should be excluded from the parent form, set
[ngModelOptions]="{standalone: true}"on that control.
Angular’s documented explanation and remedies are available in its NG01354 error reference. The page identified itself as Angular v22.2.1+sha-fa63bfa when accessed on October 7, 2026.
Recommended Free Tools
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




