簡體   English   中英

Angular - 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

你還需要這個模塊來使用formGroupformControl指令。

在我的情況下,通過以下步驟解決:

首先將其添加到 app.module.ts

import { FormBuilder } from '@angular/forms';

第二次添加FormBuilder

  providers: [
    StatusBar,
    SplashScreen,
    FormBuilder,

我通過在app.module.ts中添加FormsModuleReactiveFormsModule來解決這個問題(我缺少ReactiveFormsModule ):

import { FormsModule, ReactiveFormsModule } from '@angular/forms';

  imports: [

    FormsModule,
    ReactiveFormsModule,
TestBed.configureTestingModule({
      declarations: [ LoginComponent ],
      providers: [
        FormBuilder
      ],
    })...

就我而言,我忘記在主父app.module.ts模塊文件中導入FormsModuleReactiveFormsModule

imports: [
    FormsModule,
    ReactiveFormsModule

],

另外,添加您當前的模塊文件。

sub.module.ts添加FormsModule , ReactiveFormsModule

imports: [
    FormsModule,
    ReactiveFormsModule

],

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM