[英]NullInjectorError: R3InjectorError(DynamicTestModule)[FormBuilder -> FormBuilder]: NullInjectorError: No provider for FormBuilder
[英]Angular - No provider for FormBuilder
我正在使用 Angular 9。
我收到以下錯誤:
沒有 FormBuilder 的提供者
在很多情況下都被報道過,一般的解決方案似乎是將FormsModule
添加到app.module.ts
文件中。
例如
import { FormsModule } from '@angular/forms';
imports: [
FormsModule
我已經嘗試過了,但仍然收到錯誤消息。
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!
問題
我可能正在做一些在 Angular 9 中改變的事情嗎? 我需要做什么來解決這個問題?
我的代碼:
登錄組件.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 { }
表單構建器是ReactiveFormsModule
import { ReactiveFormsModule } from '@angular/forms';
imports: [
ReactiveFormsModule
你還需要這個模塊來使用formGroup
和formControl
指令。
在我的情況下,通過以下步驟解決:
首先將其添加到 app.module.ts
import { FormBuilder } from '@angular/forms';
第二次添加FormBuilder :
providers: [
StatusBar,
SplashScreen,
FormBuilder,
我通過在app.module.ts
中添加FormsModule
和ReactiveFormsModule
來解決這個問題(我缺少ReactiveFormsModule
):
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
imports: [
FormsModule,
ReactiveFormsModule,
TestBed.configureTestingModule({
declarations: [ LoginComponent ],
providers: [
FormBuilder
],
})...
就我而言,我忘記在主父app.module.ts
模塊文件中導入FormsModule
、 ReactiveFormsModule
imports: [
FormsModule,
ReactiveFormsModule
],
另外,添加您當前的模塊文件。
sub.module.ts
添加FormsModule
, ReactiveFormsModule
imports: [
FormsModule,
ReactiveFormsModule
],
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.