【问题标题】:Angular 6: Can't bind to 'formGroup' since it isn't a known property of 'form'?Angular 6:不能绑定到“formGroup”,因为它不是“form”的已知属性?
【发布时间】:2018-11-30 12:44:08
【问题描述】:

我曾在 angular 2/4 中使用表单生成器,但现在我在 angular 6 中使用它。我见过这个问题 (Can't bind to 'formGroup' since it isn't a known property of 'form') 但它是针对 angular 2 的。 我对 angular 4 做了完全相同的操作,但我收到了这个错误。请帮忙: 我的代码是:

app.module.ts:(我已经导出了 FormsModule 和 ReactiveFormsModule):

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { LocalStorage } from './services/localStorage.service';
import { HttpModule, RequestOptions, XHRBackend } from '@angular/http';
import { Router } from '@angular/router';
import { RouterModule } from '@angular/router';
import { AppComponent } from './app.component';
import { routing } from './app.route';

import { FormsModule, ReactiveFormsModule }         from '@angular/forms';
import { LoginComponent } from './components/login/component';
import { ForgotComponent } from './components/forgotPassword/component';


@NgModule({
  exports: [
    FormsModule,
    ReactiveFormsModule
  ],
  declarations: [
    AppComponent,LoginComponent,ForgotComponent
  ],
  imports: [
    BrowserModule,
    routing,

  ],
  providers: [
    LocalStorage,
  ],
  bootstrap: [AppComponent],

})
export class AppModule { }

login.component.ts:

import { Component, ViewContainerRef, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { FormBuilder, FormGroup, Validators, NgForm } from '@angular/forms';
import { LocalStorage } from '../../services/localStorage.service';
import { environment } from '../../../environments/environment';
import { HttpService } from '../../services/http.service';
import { emailRegexp, passwordRegexp } from '../../constants';
@Component({
    selector: 'login-app',
    templateUrl: './login.component.html',
    styleUrls: ['./login.component.scss']
})

/**
 * LoginComponent class
 */

export class LoginComponent {
    private loginForm: any;
    loginValue:any;

    constructor(
        private formBuilder: FormBuilder,
        private _router: Router,
        private httpService: HttpService,
        private localStorage: LocalStorage,
    ) {
        this.loginValue = new LocalStorage(environment.localStorageKeys.ADMIN).value;

        this.loginForm = this.formBuilder.group({
            email: ['', Validators.compose([Validators.required, Validators.pattern(emailRegexp)])],
            password: ['', Validators.compose([Validators.required, Validators.minLength(8)])]
        });
    }
}

login.component.html:(类似这样的)

 <form [formGroup]="loginForm" (ngSubmit)="loginForm.valid && login()" novalidate>

 <input type="email" autocomplete="off" (focus)="focusFunction()" placeholder="User Name" formControlName="email" class="form-control">

<div class="col-12">
 <input autocomplete="off" type="password" (focus)="focusFunction()" placeholder="Password" formControlName="password" class="form-control">
 </div>

 <button [disabled]="!loginForm.valid" type="submit" class="btn btn-inverse btn-rounded btn-block">
            <div  *ngIf="!loading" class="sign-in">Sign in</div>
  </button>

  </form>

【问题讨论】:

    标签: javascript angular5 angular6 angular-forms angular-formbuilder


    【解决方案1】:

    在您的app.module.ts 中添加以下代码:

    import { BrowserModule } from '@angular/platform-browser';
    import { FormsModule, ReactiveFormsModule } from '@angular/forms';
    

    在导入数组中:

    imports: [
            BrowserModule,
            FormsModule,
            ReactiveFormsModule
        ]
    

    FormGroupFormGroupDirective 指令的选择器,主要用于将现有的FormGroup 绑定到DOM 元素,FormGroupDirectiveReactiveFormsModule 模块中可用。

    【讨论】:

      【解决方案2】:

      因此摆弄着同样令人沮丧的问题——干净的 angular-cli 安装和自定义子组件/模块 (component.html...) 以及相同的错误(“无法绑定到 'formGroup',因为它是'不是'form'的已知属性")。 Angular CLI:7.2.3,节点:10.9.0,操作系统:win32 x64,Angular:7.2.2

      终于让它工作了基于上述但有一个转折 我将 FormsModule 和 ReactiveFormsModule 导入放在 app-routing.module.ts (不是 app.module.ts)+ 子组件的 ts 中(在我的例子中:forms-demo.component.ts):

      import { FormsModule, ReactiveFormsModule } from '@angular/forms';
      ....
      @NgModule({
        imports: [
          RouterModule.forRoot(routes), 
          FormsModule, ReactiveFormsModule
      ....
      

      之后 ng build/serve 正常工作,没有任何错误。

      我不是 Angular 专家,但我的猜测是 app.module.ts 委托给应用程序路由的 v7 方法,后一个文件是应用程序和组件导入和依赖项发生的地方.... YMMV 但是希望它有所帮助。

      【讨论】:

      • 我还必须把它放在另一个地方...在我的page.module.ts 上(我确实把它留在了 app.module.ts 中)
      【解决方案3】:
      import these things in your appmodule.ts
      
      imports: [
              BrowserModule,
              FormsModule,
              ReactiveFormsModule
          ],
      

      【讨论】:

        【解决方案4】:

        在下面的差异中更新 app.module.ts 如下

        【讨论】:

          【解决方案5】:

          类似于@gloomy.penguin 在评论中的回答,但不同的场景有相同的错误。

          就我而言,我使用的是第二个模块和它自己的路由文件。

          │   app-routing.module.ts
          │   app.module.ts
          │
          └───second-module
              │   second-routing-module.module.ts
              │   second.module.ts
              │
              └───component-1
          

          我必须在 second.module.ts 而不是 app-routing.module.ts

          中导入以下内容
          import { FormsModule, ReactiveFormsModule } from '@angular/forms';
          import { BrowserModule } from '@angular/platform-browser';
          ....
          @NgModule({
            imports: [
          CommonModule,    
          FormsModule,
          ReactiveFormsModule,
          BrowserModule
          ]})
          

          任何使用第二个模块的人,请按照此操作。

          【讨论】:

            【解决方案6】:
            import { BrowserModule } from '@angular/platform-browser';
            import { NgModule } from '@angular/core';
            
            import { AppRoutingModule } from './app-routing.module';
            import { AppComponent } from './app.component';
            import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
            import { MatButtonModule, MatCheckboxModule , MatTableModule, MatDialogModule, MatTabsModule, MatNativeDateModule, MatInputModule, MatSelectModule, MatFormFieldModule} from "@angular/material";
            import { MyDialogComponent } from './my-dialog/my-dialog.component';
            import {MatDatepickerModule} from '@angular/material/datepicker';
            import { FormsModule, ReactiveFormsModule } from '@angular/forms';
            import {NgxMaterialTimepickerModule} from 'ngx-material-timepicker';
            import { CommonModule } from '@angular/common';
            import { HighlightDirective } from './highlight.directive';
            
            @NgModule({
              declarations: [
                AppComponent,
                MyDialogComponent,
                HighlightDirective,
              ],
              imports: [
                BrowserModule,
                BrowserAnimationsModule,
                MatButtonModule,
                MatCheckboxModule,
                MatTableModule,
                MatDialogModule,
                MatTabsModule,
                MatNativeDateModule,
                MatInputModule,
                MatSelectModule,
                MatDatepickerModule,
                FormsModule,
                ReactiveFormsModule,
                NgxMaterialTimepickerModule,
                CommonModule,
                MatFormFieldModule,
                AppRoutingModule
              ],
            

            【讨论】:

              【解决方案7】:

              不能绑定到“formGroup”,因为它不是“form”的已知属性?为什么意味着?答:“ReactiveFormsModule”无法加载到您的组件中。您只需将组件名称添加到根模块(app.module.ts)

              我的解决方案:

              **WITHOUT ROUTING**
                    **app.modules.ts**
                    STEP1 : import { FormsModule,ReactiveFormsModule } from '@angular/forms';
                    STEP2 : check your component (AppComponent)loaded or not
                             @NgModule({
                                declarations: [
                                   AppComponent
                                 ],
                             imports: [
                               BrowserModule,
                               AppRoutingModule,
                               ReactiveFormsModule,
                               FormsModule
                              ],
                           providers: [],
                           bootstrap: [AppComponent]
                          })
                    app.component.html
                       use and check <form [formGroup]="registerForm"></form>
              
              
              
               **WITH ROUTING**
                  Eg;I have 2 files - form.component.html,form.component.ts
              
                           STEP1:Import and add component(FormComponent) loaded or not in app.component.ts(rootcomponent) below here.
              import { FormComponent } from "./form/form.component";
                                   @NgModule({
                                        declarations: [
                                           AppComponent,
                                           FormComponent
                                         ],
                                     imports: [
                                       BrowserModule,
                                       AppRoutingModule,
                                       ReactiveFormsModule,
                                       FormsModule
                                      ],
                                   providers: [],
                                   bootstrap: [AppComponent]
                                  });
              

              【讨论】:

                猜你喜欢
                • 2022-10-05
                • 2018-02-24
                • 2021-04-08
                • 1970-01-01
                • 2019-08-26
                • 2019-09-19
                • 2021-05-30
                • 2017-09-01
                相关资源
                最近更新 更多