ข้อผิดพลาดเชิงมุม:“ ไม่สามารถผูกกับ 'ngModel' ได้เนื่องจากไม่ใช่คุณสมบัติที่รู้จักของ 'อินพุต' "


296

ฉันใช้ Angular 4 และฉันได้รับข้อผิดพลาดในคอนโซล:

ไม่สามารถผูกกับ 'ngModel' ได้เนื่องจากไม่ใช่คุณสมบัติที่รู้จักของ 'อินพุต'

ฉันจะแก้ไขปัญหานี้ได้อย่างไร


28
คุณจำเป็นต้องเพิ่มFormsModuleการของโมดูลที่คุณใช้imports: [] ngModelมิฉะนั้นโพสต์รหัสของคุณ
GünterZöchbauer

9
ฉันไม่สามารถคิดได้ว่านักพัฒนา Angular 2 & 4 ใหม่ทุกคนจะได้รับปัญหานี้แน่นอน (รวมอยู่ในตัวเอง) ครั้งสุดท้ายที่คุณใช้ Angular และไม่ต้องการใช้ ngModel ที่ไหนสักแห่ง? ฉันไม่เข้าใจว่าทำไม FormsModule จึงไม่รวมอยู่ในค่าเริ่มต้น ....
Mike Gledhill

สำหรับสิ่งที่คุ้มค่าฉันพบข้อผิดพลาดนี้ใน IONIC-4 (4.11.0) เมื่อทำงานกับการตรวจสอบแบบฟอร์ม ถ้าฉันไม่ทำอะไรนอกจากเพิ่ม formControlName = "myControl" ไปยัง <ion-input> ที่ใดก็ได้ในแบบฟอร์มฉันจะได้รับข้อความแสดงข้อผิดพลาด ngModel binding คุณสมบัติสำรองเช่น formControlName1 = "myControl" ไม่ทำให้เกิดข้อผิดพลาดนี้
Memetican

คำตอบ:


674

ในการใช้การผูกข้อมูลสองทางสำหรับอินพุตฟอร์มคุณจำเป็นต้องนำเข้าFormsModuleแพ็คเกจในโมดูล Angular ของคุณ

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

@NgModule({
    imports: [
         FormsModule      
    ]

แก้ไข

เนื่องจากมีคำถามซ้ำซ้อนกันจำนวนมากที่มีปัญหาเดียวกันฉันจึงปรับปรุงคำตอบนี้

มีสองเหตุผลที่เป็นไปได้

  • ไม่มีFormsModuleดังนั้นจึงเพิ่มสิ่งนี้ไปยังโมดูลของคุณ

    import { FormsModule } from '@angular/forms';
    
    @NgModule({
        imports: [
            FormsModule      
        ]
  • ตรวจสอบไวยากรณ์ / การสะกดคำ[(ngModel)]ในแท็กอินพุต


27
ความสัมพันธ์ระหว่าง ngModel และ FormsModule คืออะไร? อย่างไรก็ตามนี่ไม่ได้ผลสำหรับฉัน
วินด์

4
FormsModule มีคำสั่งเพิ่มเติมเกี่ยวกับองค์ประกอบของแบบฟอร์มรวมถึงอินพุตเลือก ฯลฯ นั่นคือเหตุผลที่จำเป็น อย่าลืมที่จะนำเข้า FormsModule ในโมดูลเดียวกันซึ่งประกาศส่วนประกอบของคุณที่มีการผูกองค์ประกอบแบบฟอร์ม
บ๊อบ

1
เราจะทำอย่างไรถ้าเราใช้สิ่งนี้ในไฟล์คอมโพเนนต์ ts
Mike Warren

1
คุณไม่ควรนำเข้าใน component.ts
Sajeetharan

@Sajeetharan จะเกิดอะไรขึ้นถ้าฉันมีเทมเพลตใน Component ของฉันที่ใช้ ng-model ในองค์ประกอบของฟอร์มบางตัว?
CJBrew

18

นี่คือคำตอบที่ถูก คุณต้องนำเข้า FormsMoudle

ที่หนึ่งใน app.module.ts

**

import { BrowserModule } from '@angular/platform-browser';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { NgModule  } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    FormsModule,
    ReactiveFormsModule ,
    BrowserModule,
    AppRoutingModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

** วินาทีใน app.component.spec.ts

import { TestBed, async } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { AppComponent } from './app.component';
import { FormsModule } from '@angular/forms';
describe('AppComponent', () => {
  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [
        RouterTestingModule,
        FormsModule
      ],
      declarations: [
        AppComponent
      ],
    }).compileComponents();
  }));

ขอแสดงความนับถือและหวังว่าจะเป็นประโยชน์


ขั้นตอนที่สองคือการแก้ไขapp.component.tsจำเป็นหรือไม่
Konrad Viltersten

8

คุณngModelไม่ได้ทำงานเพราะไม่ได้เป็นส่วนหนึ่งของคุณNgModuleเลย

คุณต้องบอกNgModuleว่าคุณมีอำนาจที่จะใช้ngModelตลอดทั้งแอปของคุณคุณสามารถทำมันได้โดยการเพิ่มFormsModuleเข้ามาของคุณapp.module.ts-> ->imports[]

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

@NgModule({

   imports: [ FormsModule ],       // HERE

   declarations: [ AppComponent ],
   bootstrap: [ AppComponent ]
 })

7

ฉันพบข้อผิดพลาดนี้เมื่อทดสอบแอป Angular 6 กับ Karma / Jasmine ฉันได้นำเข้าแล้วFormsModuleในโมดูลระดับบนสุดของฉัน แต่เมื่อฉันเพิ่มองค์ประกอบใหม่ที่ใช้[(ngModel)]การทดสอบของฉันเริ่มล้มเหลว ในกรณีนี้ผมต้องนำเข้าในของฉันFormsModuleTestBed TestingModule

beforeEach(async(() => {
  TestBed.configureTestingModule({
    imports: [
      FormsModule
    ],
    declarations: [
      RegisterComponent
    ]
  })
  .compileComponents();
}));

4

ในการapp.module.tsเพิ่มนี้:

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

@NgModule({
    declarations: [AppComponent],
    imports: [FormsModule],
})

6
คำตอบนี้มีคุณค่าเพิ่มเติมอะไรเพิ่มในคำตอบที่มีอยู่
GünterZöchbauer

4
ไม่เพิ่มค่าใด ๆ ให้กับคำตอบและรูปแบบของรหัสไม่ถูกต้อง สับสนสำหรับผู้เริ่มต้น
ssmsnet

3
ในขณะที่ข้อมูลโค้ดนี้อาจแก้ไขคำถามรวมถึงคำอธิบายช่วยปรับปรุงคุณภาพของโพสต์ของคุณ จำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตและคนเหล่านั้นอาจไม่ทราบสาเหตุของการแนะนำรหัสของคุณ
Clijsters

4

วิธีแก้ไขปัญหาที่กล่าวมาทั้งหมดถูกต้อง แต่ถ้าคุณใช้การโหลดแบบสันหลังยาวคุณFormsModuleต้องนำเข้าโมดูลย่อยที่มีรูปแบบอยู่ การเพิ่มเข้าไปapp.module.tsจะไม่ช่วย


3

ป้อนคำอธิบายรูปภาพที่นี่ฉันลองทุกสิ่งที่กล่าวมาข้างต้น แต่ก็ยังไม่ทำงาน

แต่ในที่สุดฉันก็พบปัญหาในไซต์ Angular ลองนำเข้า formModule ใน module.ts นั่นแหละ ป้อนคำอธิบายรูปภาพที่นี่



2

ปรับปรุงกับ7.xx เชิงมุม , พบปัญหาเดียวกันในหนึ่งของฉันโมดูล

ถ้ามันอยู่ในโมดูลอิสระของคุณเพิ่มโมดูลพิเศษเหล่านี้:

import { CommonModule } from "@angular/common";
import { FormsModule } from "@angular/forms";

@NgModule({
  imports: [CommonModule, FormsModule], // the order can be random now;
  ...
})

ถ้ามันอยู่ในของคุณapp.module.tsเพิ่มโมดูลเหล่านี้:

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

@NgModule({
  imports:      [ FormsModule, BrowserModule ], // order can be random now
  ...
})

ตัวอย่างง่าย ๆที่จะพิสูจน์กรณี


2

ngModelคำตอบสำหรับฉันคือการสะกดคำผิด ผมเคยเขียนไว้เช่นนี้ในขณะที่มันควรจะเป็นngModulengModel

เห็นได้ชัดว่าความพยายามอื่น ๆ ทั้งหมดล้มเหลวในการแก้ไขข้อผิดพลาดสำหรับฉัน


Ya, สิ่งนี้เกิดขึ้นกับฉันเช่นกัน ... โมเดล! = โมดูลทำไมมันถึงไม่ไปในสมองของฉัน!
ราหุลซอน

1

import { FormsModule } from '@angular/forms'; // <<<< นำเข้าที่นี่

BrowserModule, FormsModule // <<<< และที่นี่

ดังนั้นเพียงแค่ค้นหาapp.module.tsหรือไฟล์โมดูลอื่นและตรวจสอบว่าคุณได้FormsModuleนำเข้ามา ...


1

ReactiveFormsModuleในกรณีของฉันฉันจะเพิ่มการนำเข้าที่ขาดหายไปซึ่งเป็น


1

นำเข้าโมดูลฟอร์มใน app.module.ts

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


@NgModule({
  declarations: [
    AppComponent,
    ContactsComponent
  ],
  imports: [
    BrowserModule,HttpModule,FormsModule     //Add here form  module
  ],
  providers: [],
  bootstrap: [AppComponent]
})

ใน html:

<input type="text" name="last_name" [(ngModel)]="last_name" [ngModelOptions]="{standalone: true}" class="form-control">

ฉันใช้แบบฟอร์มใน html และโมดูลแบบฟอร์มที่นำเข้าใน app.madule.ts like- import {FormsModule} จาก '@ angular / forms' และเพิ่ม FormsModule นั้นในการนำเข้า
Brahmmeswara Rao Palepu

1

ในกรณีของฉันฉันสะกดผิดฉันหมายถึง ngmodel istead ของ ng M odel :) หวังว่าจะช่วยได้!

คาดหวัง - [(ngModel)] จริง - [(ngmodel)]


1

คุณควรตรวจสอบสิ่งต่อไปนี้หากการผูกสองทางไม่ทำงาน

ใน html ngModel ควรถูกเรียกด้วยวิธีนี้ ไม่มีการพึ่งพาแอตทริบิวต์อื่นขององค์ประกอบอินพุต

<input [(ngModel)]="inputText">

ตรวจสอบให้แน่ใจว่า FormsModule ถูกนำเข้าไปยังไฟล์โมดูล app.modules.ts

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

@NgModule({
    declarations: [
        AppComponent,
        HomeComponent // suppose, this is the component in which you are trying to use two ay binding
    ],
    imports: [
        BrowserModule,
        FormsModule,
        // other modules
],
    providers: [],
    bootstrap: [AppComponent]
})
export class AppModule { }

ตรวจสอบให้แน่ใจว่ามีการเพิ่มส่วนประกอบที่คุณพยายามใช้ ngModel สำหรับการผูกสองวิธีในการประกาศของ เพิ่มรหัสในจุดก่อนหน้า # 2

นี่คือทุกสิ่งที่คุณต้องทำเพื่อให้การผูกสองทางโดยใช้งาน ngModel นี่เป็นการตรวจสอบถึงมุมฉาก 9


0

ถ้าคุณต้องการใช้การเชื่อมโยงข้อมูลแบบสองทิศทางสำหรับอินพุตแบบฟอร์มคุณต้องนำเข้าแพ็คเกจ FormsModule ในโมดูล Angular ของคุณ สำหรับข้อมูลเพิ่มเติมดูการสอนอย่างเป็นทางการของ Angular 2 ที่นี่และเอกสารประกอบอย่างเป็นทางการสำหรับแบบฟอร์ม

ใน app.module.ts เพิ่มบรรทัดด้านล่าง:

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

[...]

@NgModule({
  imports: [
    [...]
    FormsModule
  ],
  [...]
})

0

แรกนำเข้า FormsModule แล้วใช้ ngModel ใน component.ts ของคุณ

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

@NgModule({
 imports: [ 
            FormsModule  
          ];

รหัส HTML:

<input type='text' [(ngModel)] ="usertext" />

0

หากแม้หลังจากการนำเข้า formmodule ยังคงมีปัญหาอยู่ให้ตรวจสอบว่าอินพุตของคุณไม่มีแอตทริบิวต์ "ชื่อ" ที่มีค่าเท่ากับอินพุตอื่นในหน้า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.