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


1379

Angularアプリを起動すると、コンポーネントが表示されていなくても、次のエラーが発生します。

<input>アプリが機能するようにコメントアウトする必要があります。

zone.js:461 Unhandled Promise rejection: Template parse errors:
Can't bind to 'ngModel' since it isn't a known property of 'input'. ("
   <div>
      <label>Created:</label>
      <input  type="text" [ERROR ->][(ngModel)]="test" placeholder="foo" />
   </div>
</div>"): InterventionDetails@4:28 ; Zone: <root> ; Task: Promise.then ; Value: 

私はヒーロープランカーを見ていますが、コードとの違いはありません。

コンポーネントファイルは次のとおりです。

import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { Intervention } from '../../model/intervention';

@Component({
   selector: 'intervention-details',
   templateUrl: 'app/intervention/details/intervention.details.html',
   styleUrls: ['app/intervention/details/intervention.details.css']
})

export class InterventionDetails
{
   @Input() intervention: Intervention;

   public test : string = "toto";
}

11
ヒーロー・プラッカーとは何ですか?
IronAces

3
彼らは昨日RC5に更新してから、私は同じ問題を抱えている(興味深いことに、それは私の同僚のために働く...)私は@abreneliereが自分のチュートリアルについて話していると思う- angular.io/docs/ts/latest/tutorial
PetLahev

4
@DanielShillcock、英雄plunkerのツアー
Mark Rajcok

2
はい、ngModelを使用しているため、英雄ツアーのチュートリアルを参照しました。
AnthonyBrenelière16年

5
私はAngularを見つめているだけで、Tour of Heroesチュートリアルを実行するときにこのエラーを見ました。案の定、次の行でこれを呼び出して、修正方法/理由を説明します。
Matt Penner 2017

回答:


1924

はい、それだけです。app.module.tsに、追加したばかりです。

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

[...]

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

14
実際、私はこの回答をGabriele's(これは単なるリンクです)よりも好みます。ここでは、正確なコードが示されています。困ったことに、PluralSightでのJohn Papsの「Introduction to Angular 2」の直後にこの問題にぶつかりましたが、この問題については触れられていませんでした。彼らにとっては、双方向のバインディングが機能しました。
Mike Gledhill 2017年

20
これは機能しましたが、それを自分のサブモジュールにインポートした後でのみです。これがサブモジュールに継承されないことは初心者には完全に明らかではありません。
adam0101 2018

3
私の場合、ブレースの使い方が間違っていました。私は[{ngModel}]正しいものの代わりに使用していました:[(ngModel)]
Imtiaz 2018

29
Jasmineでの同様の障害のためにこれを見つけた場合は、これらのインポートもcomponent.spec.tsファイルに追加する必要があります。
theMayer 2018

3
:そして(ジャスミン・エラーについて)それを置く場所についてstackoverflow.com/questions/39584534/...
bagsmode

534

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


9
月曜日(つまり4日前)にAngularから始めて、チュートリアルを行っていたことを認めなければならないので、何か問題があったと確信していますが、FormsModuleのインポートが機能しませんでした。次にimport { FORM_DIRECTIVES } from '@angular/forms';FORM_DIRECTIVESディレクティブを追加して追加 しました。そうすれば、バインディングが再び機能します(rc5リリースの前に機能していたことは明らかです)
PetLahev


1
@PetLahevチュートリアルで発生している問題は、8月7日の開始時にチュートリアルがリリース候補4を実行していたことです。8月8日現在、リリース候補5にあり、構文は異なります
AJ Zane

5
FORM_DIRECTIVES
ツールキット

6
SharedModuleを使用している場合は、FormsModuleもそこにインポートする必要があるかもしれません。
Difinity 2017

243

使用するため[(ngModel)]角度245+、あなたは輸入に必要FormsModuleアンギュラ形から...

また、githubのAngular repoのフォームの下のこのパスにもあります:

angular /パッケージ/フォーム/ src /ディレクティブ/ ng_model.ts

おそらく、これがために非常に喜びはないAngularJs開発者は、あなたが使用できるようNG-モデルをいつでも前に、どこでも、しかし、あなたが好きなものは何でも利用する別々のモジュールに対する角度試みとして、一度に使用するために、ngModelはであるFormsModule今。

また、ReactiveFormsModuleを使用している場合はそれもインポートする必要があります。

したがって、単にapp.module.tsを探して、FormsModuleインポートされたことを確認します...

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';  //<<<< import it here
import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule, FormsModule //<<<< and here
  ],
  providers: [],
  bootstrap: [AppComponent]
})

export class AppModule { }

また、これはFormsModule ngModelにおけるAngular4の現在の開始コメントです。

/**
 * `ngModel` forces an additional change detection run when its inputs change:
 * E.g.:
 * ```
 * <div>{{myModel.valid}}</div>
 * <input [(ngModel)]="myValue" #myModel="ngModel">
 * ```
 * I.e. `ngModel` can export itself on the element and then be used in the template.
 * Normally, this would result in expressions before the `input` that use the exported directive
 * to have and old value as they have been
 * dirty checked before. As this is a very common case for `ngModel`, we added this second change
 * detection run.
 *
 * Notes:
 * - this is just one extra run no matter how many `ngModel` have been changed.
 * - this is a general problem when using `exportAs` for directives!
 */

フォームではなく入力を使用したい場合は、を使用してngModelOptionsスタンドアロンをtrueにできます...

[ngModelOptions]="{standalone: true}"

詳細については、こちらの Angularセクションのng_modelを参照してください


95

FormsModuleをインポートする必要があります

app.module.tsを開きます

と行を追加

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

そして

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

54

これを投げることは誰かを助けるかもしれません。

AuthModuleAuthニーズの処理専用の新しいNgModuleを作成したと仮定してFormsModule、そのAuthModuleにインポートしてください。

FormsModuleのみ使用するAuthModule場合は、FormModuleINをデフォルトでインポートする必要はありません。AppModule

ので、このようなものAuthModule

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

import { authRouting } from './auth.routing';
import { LoginComponent, SignupComponent } from './auth.component';

@NgModule({
  imports:      [ 
    authRouting,
    FormsModule
   ],
  declarations: [ 
    SignupComponent,
    LoginComponent
  ]
})
export class AuthModule { }

次にAppModuleFormsModule他の場所を使用しない場合は、インポートを忘れます。


フォーム機能を使用していたサブモジュールで必要でした。上位の階層では不十分でした。
ザレフェス

45

Simple Soultion: app.module.ts内

例1

import {FormsModule} from "@angular/forms";  
// add in imports 

imports: [
 BrowserModule,
 FormsModule
 ],

例2

[(ngModel)]を使用する場合は、appsmodule.tsにFormsModuleをインポートする必要があります

import { FormsModule  } from "@angular/forms";     
@NgModule({
  declarations: [
    AppComponent, videoComponent, tagDirective, 
  ],
  imports: [
    BrowserModule,  FormsModule

  ],
  providers: [ApiServices],
  bootstrap: [AppComponent]
})
export class AppModule { }

28
2つの例の違いはどこにありますか?
Philipp Meissner

私の場合、私のcomponent.module.tsにFormsModuleをインポートする必要がありました
ISFO

40

[(ngModel)]を使用するモジュールにFormsModuleをインポートします

ここに画像の説明を入力してください


39

このエラーを解消するには、2つの手順を実行する必要があります

  1. アプリモジュールにFormsModuleをインポートする
  2. @NgModuleデコレータでインポートの値として渡します

基本的にapp.module.tsは次のようになります。

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

それが役に立てば幸い


ありがとうございました!importsセクションでそれを宣言しなかったので、コンポーネントをサブモジュールに移動したとき、それは私を狂わせていました。
Richard

30

このコンポーネントがルートにある場合、つまりapp.module.tsの場合、ルートモジュールにFormsModuleをインポートする必要があります。

親切にapp.module.tsを開いてください

@ angular / formsからFormsModuleをインポートする

例:

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

そして

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

28

Angular 7を使用しています

FormBuilderクラスを使用して反応性フォームを作成しているため、ReactiveFormsModuleをインポートする必要があります。

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

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

24

アプリモジュールにFormsModuleをインポートします。

それはあなたのアプリケーションがうまく動くようにします。

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import {ContactListCopmponent} from './contacts/contact-list.component';
import { FormsModule }   from '@angular/forms';

import { AppComponent }  from './app.component';

@NgModule({
  imports: [
    BrowserModule,
    FormsModule
  ],
  declarations: [
    AppComponent,ContactListCopmponent
  ],
  bootstrap: [ AppComponent ]
})
export class AppModule { }

22

[(ngModel)]最初に使用する必要がある場合は、インポートFormsModuleしてapp.module.tsから、インポートのリストに追加する必要があります。このようなもの:

app.module.ts

  1. インポート import {FormsModule} from "@angular/forms";
  2. インポートに追加 imports: [ BrowserModule, FormsModule ],

app.component.ts

  1. 例: <input type="text" [(ngModel)]="name" >
  2. その後 <h1>your name is: {{name}} </h1>

19

ngModelはFormsModuleの一部です。そして、ngModelで動作するように@ angular / formsからインポートする必要があります。

app.module.tsを次のように変更してください:

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

[...]

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

18

承認されたソリューションを適用した後もエラーが発生する場合は、入力タグでngModelプロパティを使用するコンポーネント用に別のモジュールファイルがあることが原因である可能性があります。その場合は、承認されたソリューションをコンポーネントのmodule.tsファイルにも適用します。


18

Angular 5を使用しています。

私の場合、RactiveFormsModuleもインポートする必要がありました。

app.module.ts(またはanymodule.module.ts)

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

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    ReactiveFormsModule
  ],

ReactiveFormsModule必要な場合FormGroup, FormControl ,ValidatorsなどにngModel必要ですReactiveFormsModule。を使用する場合は必要ありません。
アミット茅ヶ谷

@AmitChigadani ReactiveFormModuleの追加は、私の場合、エラーを解消した唯一のものです。私は角7.使用しています
Eternal21

17

私はこの質問がAngular 2に関するものであることを知っていますが、私はAngular 4を使用しており、これらの回答のどれも役に立ちませんでした。

Angular 4では、構文は

[(ngModel)]

お役に立てれば。


15

FormsModuleを正しくインポートした後も引き続きエラーが発生する場合は、ターミナルまたは(Windowsコンソール)を確認してください。プロジェクトがコンパイルされていないため(別のエラーが原因である可能性があります)、ソリューションがブラウザーに反映されていません。

私の場合、コンソールに次の無関係なエラーがありました:プロパティ 'retrieveGithubUser'がタイプ 'ApiService'に存在しません。


13

モジュールでは、使用して喜んでいるngModelをインポートする必要がありFormsModule

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

@NgModule({
  imports: [
    FormsModule,
  ],

})
export class AbcModule { }

私はapp.module.tsにこれが欠けていました、マリンドゥに感謝します!
Omzig

11

ngModelFormsModuleから送信されます。この種のエラーを受け取る場合があります。

  1. ngModelが使用されているコンポーネントである、コンポーネントが宣言されているモジュールのインポート配列にFormsModuleをインポートしませんでした。
  2. 別のモジュールから継承された1つのモジュールにFormsModuleをインポートしました。この場合、2つのオプションがあります。
    • 両方のモジュール(module1とmodule2)からインポート配列にFormsModuleをインポートします。原則として、モジュールをインポートしても、インポートされたモジュールへのアクセスは提供されません(インポートは継承されません)。

ここに画像の説明を入力してください

  • module1のインポートおよびエクスポート配列にFormsModuleを宣言して、model2でも確認できるようにします。

ここに画像の説明を入力してください

  1. (一部のバージョンではこの問題に直面しました)FormsModuleを正しくインポートしましたが、問題は入力HTMLタグにあります。入力用の名前タグ属性を追加する必要があり、[(ngModel)]のオブジェクトバインド名は、名前属性の名前と同じである必要があります

    ここに画像の説明を入力してください


11

ではngModule、あなたインポートする必要があるFormsModuleので、ngModelから来ていますFormsModule。共有した以下のコードのようにapp.module.tsを変更してください

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

@NgModule({
    declarations: [
         AppComponent,
         HomeComponent
    ],
    imports: [
         BrowserModule,
         AppRoutingModule,
         FormsModule
    ],
    bootstrap: [AppComponent]
})
export class AppModule { }

10

FormModuleとapp.moduleをインポートする

import { FormsModule } from '@angular/forms'; [...] @NgModule({ imports: [ [...] FormsModule ], [...] })

9
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule     
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule {}

8

別のモジュールで、共有されていないモジュールのコンポーネントを使用しようとすると、このエラーが発生することがあります。

たとえば、module1.componentA.component.tsとmodule2.componentC.component.tsを持つ2つのモジュールがあり、module2内のテンプレート(たとえば<module1-componentA [someInputVariableInModule1]="variableFromHTTPRequestInModule2">)でmodule1.componentA.component.tsからのセレクターを使用しようとすると、スローされますsomeInputVariableInModule1がmodule1.componentA.component.ts内で利用できないというエラー-たとえ@Input() someInputVariableInModule1 module1.componentAに。

これが発生した場合、他のモジュールでアクセスできるようにmodule1.componentAを共有する必要があります。そのため、sharedModule内でmodule1.componentAを共有すると、module1.componentAは他のモジュール内(module1以外)で使用でき、sharedModuleをインポートするすべてのモジュールは、@Input()宣言された変数を挿入するテンプレートのセレクターにアクセスできます。


1
私はこれとまったく同じ問題を抱えています。あなたは、ComponentAをComponentCで使用できるようにモジュールを共有する必要があると言います。しかし.. module1をどのように共有しますか?「モジュールを共有する」ための構文はどれですか?私はmodule1をエクスポートしてからmodule2にインポートすると十分に共有されたと思いますが、それでもこの問題がありました
Agorilla

2
だから、自分自身に答えるために、これは、モジュールの共有方法ですangular-2-training-book.rangle.io/handout/modules/...
Agorilla

2
申し訳ありませんが、コメントがそれほど速くありませんでした:)はい、これは、SharedModuleを作成し、そこに独自のモジュールをインポートして、他の複数のモジュールで使用する方法です。次に、共有モジュールにインポートされたモジュールを使用するSharedModuleをインポートします。
Guntram 2017

8

私のシナリオでは、[CommonModule]と[FormsModule]の両方をモジュールにインポートする必要がありました。

import { NgModule } from '@angular/core' 
import { CommonModule } from '@angular/common'; 
import { FormsModule } from '@angular/forms'; 

import { MyComponent } from './mycomponent'

@NgModule({
    imports: [
        CommonModule,
        FormsModule
    ],
    declarations: [
        MyComponent 
    ]
 }) 
export class MyModule { }

8

FormsModuleをインポートする必要があります

開いた app.module.tsをます

と行を追加

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

そして

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

8

同じエラーが発生したにもかかわらずBrowserModule、すでにインポートされていて、FormsModule他の関連モジュールも同じエラーが発生した場合は、それらをOrderインポートする必要があることに気付きました。だから、順序は次のようにする必要があります BrowserModuleFormsModuleReactiveFormsModule

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';

@NgModule({
  imports: [
    BrowserModule,
    FormsModule,
    ReactiveFormsModule     
  ],
  providers: [],
  declarations: [
    AppComponent
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}

これが誰かを助けることを願って.. :)


7

これは、タイプスクリプトの代わりにプレーンJavaScriptを使用するユーザー向けです。以下のようなページの上部にあるフォームスクリプトファイルを参照することに加えて

<script src="node_modules/@angular/forms/bundles/forms.umd.js"></script>

また、モジュールローダーにをロードするように指示する必要がありますng.forms.FormsModule。変更を加えた後importsNgModuleメソッドの私のプロパティは以下のようになりました

imports: [ng.platformBrowser.BrowserModule, ng.forms.FormsModule],

幸せなコーディング!


6

RC1からRC5にアップグレードし、このエラーを受け取りました。

私は移行を完了しました(新しいapp.module.tsファイルを導入package.jsonし、新しいバージョンと不足しているモジュールを含めるように変更し、最後main.tsAngular2クイックスタートの例に基づいてそれに応じて起動するように変更しました)。

私は、インストールされたバージョンが正しいことを確認するために、npm updateそしてその後npm outdated、まだ運がありませんでした。

node_modulesフォルダーを完全にワイプして再インストールしましたnpm install-Voila!問題が解決しました。


5

私が最初にチュートリアルを行ったとき、main.tsは現在のものとは少し異なって見えました。非常によく似ていますが、違いに注意してください(上のものが正しいです)。

正しい:

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';

platformBrowserDynamic().bootstrapModule(AppModule);

古いチュートリアルコード:

import { bootstrap }    from '@angular/platform-browser-dynamic';
import { AppComponent } from './app.component';
bootstrap(AppComponent);

4

app.module.tsにコードを追加します。

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

[...]

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