Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

NG01354 means an ngModel control inside a child component cannot register with the form directive in its parent component. To include that control in the parent form, expose the matching form directive through the child’s viewProviders: use NgForm for a template-driven form or FormGroupDirective for a reactive form. If the control should remain independent, mark it standalone instead.

Why Angular reports NG01354

Angular’s NG01354 documentation identifies the cause: NgModel injects ControlContainer with @Host(). That host boundary prevents the lookup from crossing a component boundary to find a form directive in the parent template.

As a result, the child’s control cannot register with the parent form. It is absent from the parent form’s value, validity, and submission state. This is a component-boundary registration issue, not necessarily a misspelled model binding.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Choose the fix that matches the intended behavior

What you want Parent form type Expose through the child’s viewProviders
Include the child control in the parent form Template-driven form using NgForm ControlContainer mapped to NgForm
Include the child control in the parent form Reactive form using [formGroup] ControlContainer mapped to FormGroupDirective
Keep the child control independent Either Set [ngModelOptions]="{standalone: true}" on the control; this opts it out rather than registering it with the parent

Expose a template-driven parent form

If the parent uses a template-driven form, import ControlContainer and NgForm from @angular/forms. In the child component, add this provider:

viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]

This makes the parent’s NgForm available as the child control’s container, allowing the control to participate in the parent form.

Expose a reactive parent form

If the parent uses a reactive form with [formGroup], import ControlContainer and FormGroupDirective from @angular/forms. In the child component, use:

viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }]

Use the directive that matches the parent form. Angular’s guidance says this lets the parent see and validate the child controls normally.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Keep the control outside the parent form

If the control is intentionally independent, add [ngModelOptions]="{standalone: true}" to that control. Standalone mode is an opt-out: it avoids registering the control with the parent form; it does not make the control part of that form.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Check which component owns the form and control

  1. Use the NG01354 warning’s call stack to locate the ngModel that triggers the error.
  2. Check whether the component containing the <form> element also owns the input. If the input is in a child component, the component boundary is relevant.
  3. Decide whether the control belongs in the parent form. If it does, expose the matching container with viewProviders; if it does not, set the control to standalone.

The official Angular error entry identifies the page as Angular v22.2.1+sha-fa63bfa when accessed on October 7, 2026. The registration explanation and remedies above are documented there.

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.