TypeScript-のAngular Frameworkエラー-「exportAsがngFormに設定されているディレクティブはありません」


226

TypeScriptのAngular2フォームフレームワークを使用しているときに、このエラーが発生し続けます。

directive「exportAs」が「ngForm」に設定されているものはありません

これが私のコードです

プロジェクトの依存関係:

  "dependencies": {
    "@angular/common": "2.0.0-rc.6",
    "@angular/compiler": "2.0.0-rc.6",
    "@angular/core": "2.0.0-rc.6",
    "@angular/forms": "2.0.0-rc.6",
    "@angular/http": "2.0.0-rc.6",
    "@angular/platform-browser": "2.0.0-rc.6",
    "@angular/platform-browser-dynamic": "2.0.0-rc.6",
    "@angular/router": "3.0.0-rc.2",
    "ng2-bootstrap": "^1.1.1",
    "reflect-metadata": "^0.1.8",
    "core-js": "^2.4.0",
    "es6-module-loader": "^0.17.8",
    "rxjs": "5.0.0-beta.11",
    "systemjs": "0.19.27",
    "zone.js": "0.6.17",
    "jquery": "3.0.0",
  }

そして、これはログインテンプレートです:

<form #loginForm="ngForm" (ng-submit)="authenticate(loginForm.value)">
</form>

...そしてログインコンポーネント:

import { Component } from '@angular/core';
import {Http, Headers}  from '@angular/http';
@Component({
    moduleId: module.id,
    selector: 'login-cmp',
    templateUrl: 'login.component.html'
})
export class LoginComponent {
  constructor($http: Http) {
    this.$http = $http;
  }
  authenticate(data) {
   ... 
  }
}

私はこのエラーがあります:

zone.js?1474211973422:484 Unhandled Promise rejection: Template parse errors:    
There is no directive with "exportAs" set to "ngForm" ("
            <form [ERROR ->]#loginForm="ngForm" 
(ngsubmit)="authenticate(loginForm.value)">

回答:


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

@NgModule({
  imports: [
             BrowserModule,

             FormsModule      //<----------make sure you have added this.
           ],
  ....
})

32
私はこれを実行しましたが、それでもエラーが発生します。他のアイデアはありますか?(私はリリース版です。)
David Pfeffer

30
これは、必要があり、<form>要素にバインドする
ポップ

6
@popありがとう、それを追加していたためdiv、このエラーが発生しました。
Arg0n 2017年

1
おかげで、私はこれがで行く忘れ保つimports配列ではなく、providers配列
TetraDev

9
私の問題は、モジュールにReactiveFormsModuleを追加することで解決しました。
Mohammad Mirzaeyan 2018年

50

FormsModuleルートAppModuleだけでなく、角度フォームディレクティブを使用するすべてのsubModuleにもインポートする必要があります。

// SubModule A

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

@NgModule({
  imports: [
    CommonModule,
    FormsModule      //<----------make sure you have added this.
  ],
  ....
})

1
エクスポート配列に追加でき、複数のサブモジュールのインポートに追加する必要はありません
Samih A

@SamihA例で説明してください、エクスポートアレイはAppModuleまたはサブモジュールAに入りますか?
TetraDev

ReactiveFormsModuleをインポートすることも忘れないでください
Snedden27

私のために働いた-私はnpmを殺してnpm run startを再実行するまでエラーをクリアしなかったことがわかった。
Dovev Hefetz

45

私はこれが古い投稿であることを知っていますが、私の解決策を共有したいと思います。このエラーを解決するために、インポート []配列に「ReactiveFormsModule」を追加しました

エラー:「exportAs」が「ngForm」(」に設定されているディレクティブはありません

修正:

module.ts

'@ angular / forms'から{FormsModule、ReactiveFormsModule }をインポートする

 imports: [
    BrowserModule,
    FormsModule , 
    ReactiveFormsModule
  ],

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

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

4
私はこれを実行しましたが、それでもエラーが発生します。他のアイデアはありますか?(私はリリース版です。)
David Pfeffer

16
これを理解したことはありますか?同じエラーが発生し、FormsModuleもインポートされています。
Josh、

8

(誰かが私のように盲目だった場合に備えて) form FTW!必ず<form>タグを使用してください

動作しません:

<div (ngSubmit)="search()" #f="ngForm" class="input-group">
    <span class="input-group-btn">
      <button class="btn btn-secondary" type="submit">Go!</button>
    </span>
    <input type="text" ngModel class="form-control" name="search" placeholder="Search..." aria-label="Search...">
</div>

魅力のように動作します:

 <form (ngSubmit)="search()" #f="ngForm" class="input-group">
            <span class="input-group-btn">
              <button class="btn btn-secondary" type="submit">Go!</button>
            </span>
            <input type="text" ngModel class="form-control" name="search" placeholder="Search..." aria-label="Search...">
</form>

6

名前が次のように割り当てられている場合:

#editForm="testForm"

... exportAsはコンポーネントデコレータで定義する必要があります。

selector: 'test-form',
templateUrl: './test-form.component.html',
styleUrls: ['./test-form.component.scss'],
exportAs: 'testForm'

これは私にとってはうまくいきましたが、受け入れられた解決策はうまくいきませんでした。
ir0h

これが、承認されたソリューション以外に実行する必要があることを確認する
hello_earth

5

FormsModuleをインポートするかどうかを確認します。新しいフォームangular 2リリースバージョンにはngControlはありません。例としてテンプレートを変更する必要があります

<div class="row">
    <div class="form-group col-sm-7 col-md-5">
        <label for="name">Name</label>
        <input type="text" class="form-control" required
               [(ngModel)]="user.name"
               name="name" #name="ngModel">
        <div [hidden]="name.valid || name.pristine" class="alert alert-danger">
            Name is required
        </div>
    </div>
</div>

3

あなたが気にしなければならない二つのこと..

  1. サブモジュールを使用する場合は、そのサブモジュールにFormModuleをインポートする必要があります。

            **imports:[CommonModule,HttpModule,FormsModule]**
  2. あなたはモジュールのFormModuleをエクスポートする必要があります

        **exports:[FormsModule],**

    したがって、まとめると imports:[CommonModule、HttpModule、FormsModule]、exports:[FormsModule]、

  3. トップでは、FormsModuleをインポートする必要があります

    '@ angular / forms'から{FormsModule}をインポートします。


app.module.tsのみを使用している場合

エクスポートする必要はありません。インポートのみが必要です


1
独自のモジュール内でFormsModuleを使用する場合、xxxx.modules.tsに以下が必要です。Angularからのフォームのインポート: import { FormsModule } from '@angular/forms'; imports配列NgModuleに追加します: @NgModule({ imports: [ FormsModule ],
Koen van der Linden

2

私はこの問題に直面しましたが、ここでの答えはどれもうまくいきませんでした。私はググってみたFormsModule not shared with Feature Modules

したがって、フォームが注目のモジュール内にある場合は、FromsModuleそこにインポートして追加する必要があります。

参照してください:https : //github.com/angular/angular/issues/11365


2

ログインコンポーネントのtsファイルにフォームモジュールをインポートすることに加えて、NgFormもインポートする必要があります。

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

これで私の問題は解決しました


このエラーが発生しました:キャッチされないエラー:予期しないディレクティブ 'NgForm'がモジュールによってインポートされました
Steffi Keran Rani J

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

imports:[
    BrowserModule.withServerTransition({ appId: 'ng-cli-universal' }),
    HttpClientModule,
    FormsModule,
    ReactiveFormsModule/*This one in particular*/,...
],

app.module.tsでのようなエラーを永久に解決し"cannot bind [formGroup] or no directive with export as"ます。



1

私も同じ理由で何度も何度もこの同じ質問にくるようになりました。それで、私が何が悪かったのかを言ってこれに答えましょう。誰かのために役立つかもしれません。

angular-cliコマンドでコンポーネントを作成していた

ng GCコンポーネント/何か/何か

それがしたことは、私が望むようにコンポーネントを作成したことです。

また、コンポーネントの作成中に、App Moduleの宣言配列にコンポーネントを追加しました

この場合は削除してください。そして出来上がり!うまくいくかもしれません。


0

FormsModuleをインポートしてから、インポートのセクションに配置する必要があります。

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

0

モジュールをインポートしていない場合は単純で、 '@ angular / forms'からimport {FormsModule}をインポートして宣言します。

実行した場合は、入力フィールドからformControlName = 'whatever'を削除するだけです。


0

app.moduleファイルのインポート配列にFormsModuleを含めなかった場合は、ctrl + cでアプリを終了してng serveで再実行する必要があります。その後、追加します。angularはそれを認識せず、モジュールを再スキャンしません。 、アプリを再起動して、テンプレートドライブアプローチのすべての機能が含まれた後に、angularが新しいモジュールが含まれていることを確認できるようにする必要があります。



0

ルーティングモジュールを移動しました。つまり、ARoutingModuleをFormsModuleおよびReactiveFormsModuleの上に移動し、CommonModuleの後にモジュールの配列をインポートしました。


0

正しいモジュールをインポートするだけで、

「FormsModule」

import { FormsModule } from "@angular/forms";
@NgModule({
  imports: [
    BrowserModule,
    FormsModule //<---.
  ],
  ....
})

0

このエラーは、ジャスミンを使用して角度でユニットテストケースを記述しようとした場合にも発生します。

このエラーの基本概念はimport FormsModuleです。したがって、単体テスト用のファイルにimportsセクションを追加し、FormsModuleをそのファイルの下の

    TestBed.configureTestingModule
    For eg: 
    TestBed.configureTestingModule({
        declarations: [ XYZComponent ],
        **imports: [FormsModule]**,
    }).compileComponents();

-3

私は同じ問題を抱えており、次のコマンドですべての依存関係(package.json)を更新することで解決しました npm update -D && npm update -S

@GünterZöchbauerが指摘したように、必ずFormsModuleを最初にインクルードしてください。

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