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 Thanks, 추가하고 있었고이 div오류가 발생했습니다.
— Arg0n

1
덕분에, 나는 이것이 간다 잊고 계속 imports배열, 그리고 providers배열
— TetraDev

9
내 문제는 내 모듈에 ReactiveFormsModule을 추가하여 해결되었습니다.
— 모하마드 미르자 얀

50

당신은 수입에이 FormsModule루트 AppModule뿐만 아니라에 뿐만 아니라 모든 서브 모듈로 어떤 각도 형태 지시어를 사용합니다.

// 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

나는 이것이 오래된 게시물이라는 것을 알고 있지만 내 솔루션을 공유하고 싶습니다. 이 오류를 해결하기 위해 imports [] 배열 에 " 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을 가져 왔는지 확인하십시오. 새로운 형태의 각도 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],**

    함께 가져 오기 : [CommonModule, HttpModule, FormsModule], 내보내기 : [FormsModule],

  3. Top u에서 FormsModule을 가져와야합니다.

    '@ angular / forms'에서 {FormsModule} 가져 오기;


app.module.ts 만 사용하는 경우

수출 불필요. 수입 만 필요


1
자신의 모듈에서 FormsModule을 사용하는 경우 xxxx.modules.ts에 다음이 필요합니다. 각도에서 가져 오기 양식 : import { FormsModule } from '@angular/forms'; 수입 배열 NgModule에 추가 : @NgModule({ imports: [ FormsModule ],
— 공원 밴을 린든 데르

2

나는이 문제에 직면했지만 여기에 대한 답변 중 어느 것도 나를 위해 일하지 않았다. 나는 구글을 발견했다.FormsModule not shared with Feature Modules

따라서 양식이 기능 모듈에 있으면 해당 모듈을 가져 와서 추가해야합니다 FromsModule.

참조하십시오 : https://github.com/angular/angular/issues/11365


2

로그인 구성 요소 ts 파일에서 양식 모듈을 가져 오는 것 외에도 NgForm도 가져와야합니다.

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

이것은 내 문제를 해결했다


나는이 오류가 발생했습니다 : catch되지 않은 오류 : 예기치 않은 지시 모듈에 의해 수입 'NgForm'
— 스테피 Keran 라니 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 구성 요소 / 무언가 / 무언가

내가 한 일은 내가 원하는대로 구성 요소를 만들었습니다.

또한 컴포넌트를 생성하는 동안 앱 모듈의 선언 배열에 컴포넌트를 추가했습니다 .

이런 경우에는 제거하십시오. 그리고 짜잔! 작동 할 수 있습니다.


0

FormsModule을 가져온 다음 가져 오기 섹션에 배치해야합니다.

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

0

모듈을 가져 오지 않은 경우 간단합니다. '@ angular / forms'에서 import {FormsModule}을 가져오고 선언하십시오.

그리고 입력 필드에서 formControlName = 'whatever'만 제거하면됩니다.


0

ctrl + c로 앱을 종료하고 ng serve로 앱을 다시 실행해야합니다. FormsModule을 포함하지 않은 경우 app.module 파일이 배열을 가져온 다음 나중에 추가하면 각도를 알지 못합니다. 모듈을 다시 스캔하지 않습니다. , 템플릿 드라이브 접근 방식의 모든 기능이 포함 된 후 angular가 새 모듈이 포함되었음을 알 수 있도록 앱을 다시 시작해야합니다.



0

방금 라우팅 모듈을 이동했습니다. 즉, FormsModule 및 ReactiveFormsModule 위의 ARoutingModule과 CommonModule 이후의 모듈 배열을 가져옵니다.


0

올바른 모듈을 가져 오십시오.

"FormsModule"

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

0

이 오류는 jasmine을 사용하여 단위 테스트 케이스를 각도로 쓰려고 할 때도 발생합니다.

이 오류의 기본 개념은 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ünter Zöchbauer가 지적했듯이 FormsModule을 먼저 포함시켜야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.