角度エラー:「「入力」の既知のプロパティではないため、「ngModel」にバインドできません」


296

Angular 4を使用していますが、コンソールでエラーが発生します:

'ngModel'は 'input'の既知のプロパティではないため、バインドできません

どうすればこれを解決できますか?


28
あなたは追加する必要があるFormsModuleimports: []使用するモジュールのngModel。それ以外の場合は、コードを投稿してください。
ギュンターZöchbauer

9
新しいAngular 2と4のすべての開発者がこの問題にぶつかるとは思えません(私も含めて)最後にAngular を使用し、どこかでngModelを使用したくなかったのはいつですか?FormsModuleがデフォルトで含まれていない理由がわかりません...
Mike Gledhill

価値があるのは、フォーム検証を使用しているときにIONIC-4(4.11.0)でこのエラーが発生したことです。formControlName = "myControl"をフォームの任意の<ion-input>に追加する以外に何もしないと、ngModelバインディングエラーメッセージが表示されます。formControlName1 = "myControl"などの代替プロパティでは、このエラーは発生しません。
Memetican

回答:


674

フォーム入力に双方向データバインディングを使用するには、FormsModuleパッケージをAngularモジュールにインポートする必要があります。

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

@NgModule({
    imports: [
         FormsModule      
    ]

編集

同じ問題を持つ重複した質問がたくさんあるので、私はこの答えを強化しています。

考えられる理由は2つあります

  • が見つからないFormsModuleため、これをモジュールに追加し、

    import { FormsModule } from '@angular/forms';
    
    @NgModule({
        imports: [
            FormsModule      
        ]
  • [(ngModel)]入力タグの構文/スペルを確認してください


27
ngModelとFormsModuleの関係は何ですか?しかし、これは私のために働いていません。
Govind 2017

4
FormsModuleは、入力、選択など、フォームの要素に追加のディレクティブを提供します。そのため、それが必要です。フォーム要素のバインディングを含むコンポーネントを宣言する同じモジュールにFormsModuleをインポートすることを忘れないでください。
ボブは

1
これをコンポーネントのtsファイルで使用している場合はどうしますか?
マイクウォーレン

1
component.ts内でインポートしないでください
Sajeetharan

@Sajeetharanフォーム要素で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の2番目

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();
  }));

よろしくお願いいたします。


2番目のステップはapp.component.tsを変更する必要がありますか?
Konrad Viltersten、

8

あなたngModelNgModuleまだあなたの一部ではないのであなたは働いていません。

あなたは伝える必要がありますNgModuleあなたが使用する権限を持っていることをngModelあなたが追加することによってそれを行うことができ、あなたのアプリを通じてFormsModuleあなたへapp.module.ts> - imports- > []

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

@NgModule({

   imports: [ FormsModule ],       // HERE

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

7

Karma / JasmineでAngular 6アプリをテストすると、このエラーに遭遇しました。FormsModule最上位モジュールに既にインポートしました。しかし[(ngModel)]、テストを使用する新しいコンポーネントを追加すると、失敗し始めました。この場合、にインポートFormsModuleする必要がありましたTestBed TestingModule

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

5

上記の問題の解決策はすべて正しいです。ただし、遅延読み込みを使用している場合FormsModuleは、フォームが含まれている子モジュールにインポートする必要があります。それを追加してapp.module.tsも役に立ちません。


4

これをapp.module.ts追加:

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

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

6
この回答は既存の回答にどのような付加価値をもたらしますか?
ギュンターZöchbauer

4
答えに値を追加せず、コードの形式が間違っています。初心者のために混乱しています。
ssmsnet 2017

3
このコードスニペットは問題を解決する可能性がありますが、説明を含めると、投稿の品質を向上させるのに役立ちます。あなたは将来の読者のための質問に答えていることを覚えておいてください、そしてそれらの人々はあなたのコード提案の理由を知らないかもしれません。
Clijsters 2017

3

ここに画像の説明を入力してください上記のことをすべて試しましたが、うまくいきません。

しかし、最後にAngularサイトで問題を見つけました。module.tsにformModuleをインポートしてみてください。 ここに画像の説明を入力してください


2

追加してみてください

モジュールレベルのngModel

コードは上記と同じです


2

Angular 7.xxで更新すると、私のモジュールの 1つで同じ問題が発生します

独立したモジュールにある場合は、次の追加モジュールを追加します。

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。私はそれをこのように書いngModuleてもらいましたngModel

他のすべての試みは明らかに私のためにエラーを解決することに失敗しました。


ええ、これは私にも起こりました...モデル!=モジュールなぜそれが私の頭の中に行きません!
Rahul Sonwanshi

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でフォームモジュールをインポートしました。たとえば、 '@ angular / forms'から{FormsModule}をインポートし、そのFormsModuleをインポートに追加しました。
Brahmmeswara Rao Palepu

1

私の場合、スペルを間違えたので、ng M odelではなくngmodelと呼んでいました:) 参考になりますように!

予想-[(ngModel)]実際-[(ngmodel)]


1

双方向バインディングが機能しない場合は、次のことを確認する必要があります。

HTMLでは、ngModelをこのように呼び出す必要があります。input要素の他の属性に依存していません

<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

フォーム入力に双方向データバインディングを使用する場合は、AngularモジュールにFormsModuleパッケージをインポートする必要があります。詳細については、こちらのAngular 2公式チュートリアルとフォームの公式ドキュメントを参照してください

app.module.tsで以下の行を追加します。

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

[...]

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

0

最初にFormsModuleをインポートしてから、コンポーネントでngModelを使用します。ts

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

@NgModule({
 imports: [ 
            FormsModule  
          ];

HTMLコード:

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

0

formsmoduleをインポートした後でも問題が解決しない場合は、入力に、ページ上の別の入力と等しい値を持つ「name」属性がないことを確認してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.