I am using Angular 9.
I am getting the following error:
No provider for FormBuilder
It has been reported in many cases, and the general solution appears to be to add the FormsModule
to the app.module.ts
file.
eg
import { FormsModule } from '@angular/forms';
imports: [
FormsModule
I have tried this, but am still getting the error.
ERROR Error: Uncaught (in promise): NullInjectorError: R3InjectorError(AppModule)[FormBuilder -> FormBuilder -> FormBuilder]: NullInjectorError: No provider for FormBuilder: NullInjectorError: R3InjectorError(AppModule)[FormBuilder -> FormBuilder -> FormBuilder]: NullInjectorError: No provider for FormBuilder!
Question
Am I maybe doing something that's changed in Angular 9? What do I need to do to fix this?
My code:
login.component.ts
import { Component, OnInit } from '@angular/core';
import {Router} from '@angular/router';
import { FormGroup, FormBuilder } from '@angular/forms';
import { AuthService } from '../../services/auth.service';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.css']
})
export class LoginComponent implements OnInit {
loginForm: FormGroup;
constructor(private authService: AuthService, private formBuilder: FormBuilder, private router: Router) {
}
ngOnInit(): void {
this.loginForm = this.formBuilder.group({
username: [''],
password: ['']
});
}
get f() { return this.loginForm.controls; }
login() {
this.authService.login(
{
username: this.f.username.value,
password: this.f.password.value
}
)
.subscribe(success => {
if (success) {
this.router.navigate(['/secret-random-number']);
}
});
}
}
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { LoginComponent } from './auth/containers/login/login.component';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { FlexLayoutModule } from '@angular/flex-layout';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
import { MatButtonModule } from '@angular/material/button';
import { MatCardModule } from '@angular/material/card';
import { MatToolbarModule } from '@angular/material/toolbar';
import { FormsModule } from '@angular/forms';
import { ApprovalListComponent } from './approval-list/component/approval-list.component';
import { MatTableModule } from '@angular/material/table';
import { MatPaginatorModule } from '@angular/material/paginator';
import { MatSortModule } from '@angular/material/sort';
import { MatTableExporterModule } from 'mat-table-exporter';
@NgModule({
declarations: [
AppComponent,
LoginComponent,
ApprovalListComponent
],
imports: [
BrowserModule,
AppRoutingModule,
HttpClientModule,
BrowserAnimationsModule,
FlexLayoutModule,
MatFormFieldModule,
MatInputModule,
MatButtonModule,
MatCardModule,
MatToolbarModule,
FormsModule,
MatTableModule,
MatPaginatorModule,
MatSortModule,
MatTableExporterModule
],
providers: [LoginComponent],
bootstrap: [AppComponent]
})
export class AppModule { }
form builder is ReactiveFormsModule
import { ReactiveFormsModule } from '@angular/forms';
imports: [
ReactiveFormsModule
you'll also need this module to use formGroup
and formControl
directives.
in my case resolved by these steps:
first add this into app.module.ts
import { FormBuilder } from '@angular/forms';
second add FormBuilder :
providers: [
StatusBar,
SplashScreen,
FormBuilder,
I fixed this by adding both FormsModule
and ReactiveFormsModule
in app.module.ts
(I was missing ReactiveFormsModule
):
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
imports: [
FormsModule,
ReactiveFormsModule,
TestBed.configureTestingModule({
declarations: [ LoginComponent ],
providers: [
FormBuilder
],
})...
In my case, I forgot to import FormsModule
, ReactiveFormsModule
in the main parent app.module.ts
module file
imports: [
FormsModule,
ReactiveFormsModule
],
also, Add in your current module file.
sub.module.ts
add FormsModule
, ReactiveFormsModule
imports: [
FormsModule,
ReactiveFormsModule
],
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.