繁体   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