I have this simple input in my component which uses [(ngModel)]
:
<input type="text" [(ngModel)]="test" placeholder="foo" />
And I get the following error when I launch my app, even if the component is not displayed.
zone.js:461 Unhandled Promise rejection: Template parse errors: Can't bind to 'ngModel' since it isn't a known property of 'input'.
Here is the component.ts:
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { Intervention } from '../../model/intervention';
@Component({
selector: 'intervention-details',
templateUrl: 'app/intervention/details/intervention.details.html',
styleUrls: ['app/intervention/details/intervention.details.css']
})
export class InterventionDetails
{
@Input() intervention: Intervention;
public test : string = "toto";
}
Yes, that's it. In the app.module.ts file, I just added:
import { FormsModule } from '@angular/forms';
[...]
@NgModule({
imports: [
[...]
FormsModule
],
[...]
})
Answered 2023-09-20 20:58:11
[{ngModel}]
instead of the correct one: [(ngModel)]
- anyone component.spec.ts
file as well. - anyone In order to be able to use two-way data binding for form inputs you need to import the FormsModule
package in your Angular module.
For more information, see the Angular 2 official tutorial here and the official documentation for forms.
Answered 2023-09-20 20:58:11
import { FORM_DIRECTIVES } from '@angular/forms';
and added the FORM_DIRECTIVES
to directives and yeah my binding is working again (to be clear it was working before rc5 release) - anyone FORM_DIRECTIVES
are dead just in case - anyone For using [(ngModel)]
in Angular 2, 4 & 5+, you need to import FormsModule from Angular form...
Also, it is in this path under forms in the Angular repository on GitHub:
angular / packages / forms / src / directives / ng_model.ts
Probably this is not a very pleasurable for the AngularJS developers as you could use ng-model everywhere anytime before, but as Angular tries to separate modules to use whatever you'd like you to want to use at the time, ngModel is in FormsModule now.
Also, if you are using ReactiveFormsModule it needs to import it too.
So simply look for app.module.ts and make sure you have FormsModule
imported in...
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms'; // <<<< import it here
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule, FormsModule // <<<< And here
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Also, these are the current starting comments for Angular4 ngModel
in FormsModule:
/**
* `ngModel` forces an additional change detection run when its inputs change:
* E.g.:
* ```
* <div>{{myModel.valid}}</div>
* <input [(ngModel)]="myValue" #myModel="ngModel">
* ```
* I.e. `ngModel` can export itself on the element and then be used in the template.
* Normally, this would result in expressions before the `input` that use the exported directive
* to have and old value as they have been
* dirty checked before. As this is a very common case for `ngModel`, we added this second change
* detection run.
*
* Notes:
* - this is just one extra run no matter how many `ngModel` have been changed.
* - this is a general problem when using `exportAs` for directives!
*/
If you'd like to use your input, not in a form, you can use it with ngModelOptions
and make standalone true...
[ngModelOptions]="{standalone: true}"
For more information, look at ng_model in the Angular section here.
Answered 2023-09-20 20:58:11
You need to import the FormsModule.
Open app.module.ts and add the lines
import { FormsModule } from '@angular/forms';
and
@NgModule({
imports: [
FormsModule
],
})
Answered 2023-09-20 20:58:11
To resolve We must include FormModule
in the app.module.ts
file to avoid the Can't bind to ngModel as it isn't a known property of the input
problem in Angular apps.
The steps are as follows,
Open app.module.ts
and add the import line
import { FormsModule } from '@angular/forms';
and add FormsModule
to imports
@NgModule({
imports: [
FormsModule
],
})
Figure 1.0 (app.module.ts file)
Answered 2023-09-20 20:58:11
Assuming you have created a new NgModule, say AuthModule
dedicated to handling your authentication needs, make sure to import FormsModule
in that AuthModule too.
If you'll be using the FormsModule
only in the AuthModule
then you wouldn't need to import the FormModule
in the default AppModule
.
So something like this in the AuthModule
:
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { authRouting } from './auth.routing';
import { LoginComponent, SignupComponent } from './auth.component';
@NgModule({
imports: [
authRouting,
FormsModule
],
declarations: [
SignupComponent,
LoginComponent
]
})
export class AuthModule { }
Then forget about importing in AppModule
if you don't use the FormsModule
anywhere else.
Answered 2023-09-20 20:58:11
Answered 2023-09-20 20:58:11
Simple solution: In file app.module.ts -
import {FormsModule} from "@angular/forms";
// Add in imports
imports: [
BrowserModule,
FormsModule
],
If you want to use [(ngModel)] then you have to import FormsModule in app.module.ts:
import { FormsModule } from "@angular/forms";
@NgModule({
declarations: [
AppComponent, videoComponent, tagDirective,
],
imports: [
BrowserModule, FormsModule
],
providers: [ApiServices],
bootstrap: [AppComponent]
})
export class AppModule { }
Answered 2023-09-20 20:58:11
There are two steps you need to follow to get rid of this error:
Basically, file app.module.ts should look like below:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
import {AppChildComponent} from './appchild.component';
@NgModule({
imports: [ BrowserModule,FormsModule ],
declarations: [ AppComponent, AppChildComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
Answered 2023-09-20 20:58:11
Sometimes, even though we are already imported BrowserModule
, FormsModule
and other related modules, we still may get the same error.
Then I realized that we need to import them in order, which is missed in my case. So the order should be like BrowserModule
, FormsModule
, and ReactiveFormsModule
.
As per my understanding, feature modules should follow the basic modules of Angular.
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
@NgModule({
imports: [
BrowserModule,
FormsModule,
ReactiveFormsModule
],
providers: [],
declarations: [
AppComponent
],
bootstrap: [AppComponent]
})
export class AppModule {}
Answered 2023-09-20 20:58:12
FormsModule
must be imported after NgModule
. This error will appear otherwise. This answer is the only one that mentions the importance of the order! - anyone I am using Angular 7.
I have to import ReactiveFormsModule, because I am using the FormBuilder class to create a reactive form.
import {
FormsModule,
ReactiveFormsModule } from '@angular/forms';
@NgModule({
imports: [
CommonModule,
FormsModule,
ReactiveFormsModule
], declarations: []})
Answered 2023-09-20 20:58:12
You need to import FormsModule in your root module if this component is in the root i.e. app.module.ts
Kindly open app.module.ts
Import FormsModule from @angular/forms
Ex:
import { FormsModule } from '@angular/forms';
and
@NgModule({
imports: [
FormsModule
],
})
Answered 2023-09-20 20:58:12
Import FormsModule in you app module.
It would let your application run well.
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import {ContactListCopmponent} from './contacts/contact-list.component';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
@NgModule({
imports: [
BrowserModule,
FormsModule
],
declarations: [
AppComponent,ContactListCopmponent
],
bootstrap: [ AppComponent ]
})
export class AppModule { }
Answered 2023-09-20 20:58:12
I'm using Angular 5.
In my case, I needed to import ReactiveFormsModule too.
File app.module.ts (or anymodule.module.ts):
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
@NgModule({
imports: [
CommonModule,
FormsModule,
ReactiveFormsModule
],
Answered 2023-09-20 20:58:12
ReactiveFormsModule
is required when you need FormGroup, FormControl ,Validators
etc. For using ngModel
, you don't require ReactiveFormsModule
. - anyone If someone is still getting errors after applying the accepted solution, it could be possibly because you have a separate module file for the component in which you want to use the ngModel property in input tag. In that case, apply the accepted solution in the component's module.ts file as well.
Answered 2023-09-20 20:58:12
I know this question is about Angular 2, but I am on Angular 4 and none of these answers helped.
In Angular 4 the syntax needs to be
[(ngModel)]
Answered 2023-09-20 20:58:12
If you are still getting the error after importing FormsModule correctly then check in your terminal or (windows console) because your project is not compiling (because of another error that could be anything) and your solution has not been reflected in your browser!
In my case, my console had the following unrelated error:
Property 'retrieveGithubUser' does not exist on type 'ApiService'.
Answered 2023-09-20 20:58:12
import { FormsModule } from '@angular/forms'; [...] @NgModule({ imports: [ [...] FormsModule ], [...] })
Answered 2023-09-20 20:58:12
ngModel is coming from FormsModule. There are some cases when you can receive this kind of error:
let the FormsModule be imported into the import array from both modules:module1 and module2. As the rule: Importing a module does not provide access to its imported modules. (Imports are not inherited)
declare the FormsModule into the import and export arrays in module1 to be able to see it in model2 also
Answered 2023-09-20 20:58:12
You need to import the FormsModule in app.module.ts and add the lines
import { FormsModule } from '@angular/forms';
@NgModule({
imports: [
FormsModule
]
})
The ngModel directive declared in the FormsModule lets you bind controls in your template-driven form to properties in your data model. When you include the directive using the syntax for two-way data binding, [(ngModel)], Angular can track the value and user interaction of the control and keep the view synced with the model.
Answered 2023-09-20 20:58:12
In the module you are willing to use ngModel you have to import FormsModule
import { FormsModule } from '@angular/forms';
@NgModule({
imports: [
FormsModule,
],
})
export class AbcModule { }
Answered 2023-09-20 20:58:12
In ngModule
you need to import FormsModule
, because ngModel
is coming from FormsModule
.
Please modify your app.module.ts like the below code I have shared
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
@NgModule({
declarations: [
AppComponent,
HomeComponent
],
imports: [
BrowserModule,
AppRoutingModule,
FormsModule
],
bootstrap: [AppComponent]
})
export class AppModule { }
Answered 2023-09-20 20:58:12
I faced the same problem and the reason was that I was using ngModel in my MenuComponent
. I imported my MenuComponent in app.module.ts
, but I forgot to add it to declarations
array.
Declaring the MenuComponent solved my issue. I.e., as shown in the below image:
Answered 2023-09-20 20:58:12
For my scenario, I had to import both [CommonModule] and [FormsModule] to my module
import { NgModule } from '@angular/core'
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { MyComponent } from './mycomponent'
@NgModule({
imports: [
CommonModule,
FormsModule
],
declarations: [
MyComponent
]
})
export class MyModule { }
Answered 2023-09-20 20:58:12
ngModel should be imported from @angular/forms because it is the part of FormsModule. So I advice you to change your app.module.ts in something like this:
import { FormsModule } from '@angular/forms';
[...]
@NgModule({
imports: [
[...]
FormsModule
],
[...]
})
Answered 2023-09-20 20:58:12
You need to import the FormsModule.
#Open app.module.ts
#add the lines
import { FormsModule } from '@angular/forms';
and
@NgModule({
imports: [
FormsModule <--------add this
],
})
if you are using reactive form then also added ReactiveFormsModule
Answered 2023-09-20 20:58:12
Sometimes you get this error when you try to use a component from a module, which is not shared, in a different module.
For example, you have 2 modules with module1.componentA.component.ts and module2.componentC.component.ts and you try to use the selector from module1.componentA.component.ts in a template inside module2 (e.g. <module1-componentA [someInputVariableInModule1]="variableFromHTTPRequestInModule2">
), it will throw the error that the someInputVariableInModule1 is not available inside module1.componentA.component.ts - even though you have the @Input() someInputVariableInModule1
in the module1.componentA.
If this happens, you want to share the module1.componentA to be accessible in other modules.
So if you share the module1.componentA inside a sharedModule, the module1.componentA will be usable inside other modules (outside from module1), and every module importing the sharedModule will be able to access the selector in their templates injecting the @Input()
declared variable.
Answered 2023-09-20 20:58:12
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {}
Answered 2023-09-20 20:58:12
This is for the folks who use plain JavaScript instead of Type Script. In addition to referencing the forms script file on top of the page like below:
<script src="node_modules/@angular/forms/bundles/forms.umd.js"></script>
You should also tell the the module loader to load the ng.forms.FormsModule
. After making the changes my imports
property of NgModule
method looked like below:
imports: [ng.platformBrowser.BrowserModule, ng.forms.FormsModule],
Answered 2023-09-20 20:58:12
I upgraded from RC1 to RC5 and received this error.
I completed my migration (introducing a new app.module.ts
file, changing package.json
to include new versions and missing modules, and finally changing my main.ts
to boot accordingly, based on the Angular2 quick start example).
I did an npm update
and then an npm outdated
to confirm the versions installed were correct, still no luck.
I ended up completely wiping the node_modules
folder and reinstalling with npm install
- Voila! Problem solved.
Answered 2023-09-20 20:58:12