'input'의 알려진 속성이 아니기 때문에 'ngModel'에 바인딩 할 수 없습니다.


1375

구성 요소가 표시되지 않더라도 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: 

Hero plunker를보고 있지만 코드와 차이가 없습니다.

구성 요소 파일은 다음과 같습니다.

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
Hero plucker 란 무엇입니까?
— IronAces

3
어제 rc5로 업데이트 한 이후에도 같은 문제가 발생합니다 (흥미롭게도 동료를 위해 작동합니다.) @abreneliere가 그들의 자습서에 대해 이야기하는 것 같습니다 -angular.io/docs/ts/latest/tutorial
— PetLahev

4
@DanielShillcock, 영웅 투어 plunker .
— Mark Rajcok

2
예, ngModel을 사용하기 때문에 Tour of heroes 튜토리얼을 참조했습니다.
— Anthony Brenelière

5
방금 Angular를보고 있는데 Tour of Heroes 튜토리얼을 수행 할 때이 오류가 발생했습니다. 확실히, 그들은 이제 다음 줄에서 이것을 불러 내고 그것을 어떻게 / 왜 수정해야하는지 알려줍니다.
— Matt Penner

답변:


1920

예, app.module.ts에서 방금 추가했습니다.

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

[...]

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

14
사실, 나는이 답변을 Gabriele (단지 링크 일 것)보다 선호합니다. 여기에 정확한 코드가 제시되어 있습니다. 귀찮게, 나는 PluralSight에서 John Paps의 "Introduction to Angular 2"에 이어이 문제에 부딪 쳤으며이 문제는 언급되지 않았습니다. 그들에게는 양방향 바인딩이 효과가있었습니다.
— Mike Gledhill

20
이것은 효과가 있었지만 하위 모듈로 가져온 후에 만 ​​가능했습니다. 이것이 서브 모듈에 의해 상속되지 않는다는 것은 초보자에게 명확하지 않습니다.
— adam0101

3
내 경우에는 중괄호 사용이 잘못되었습니다. 나는 [{ngModel}]올바른 것을 대신 사용하고 있었다 :[(ngModel)]
— Imtiaz

29
Jasmine과 유사한 실패로 인해 이것을 발견 한 사람들에게는 이러한 가져 오기도 component.spec.ts파일 에 추가해야합니다 .
— theMayer

3
그리고 어디에 넣을 것인지 (Jasmine 오류와 관련하여) : stackoverflow.com/questions/39584534/…
— bagsmode

533

양식 입력에 양방향 데이터 바인딩을 사용하려면 모듈 에서 FormsModule패키지 를 가져와야합니다 Angular. 자세한 내용은 여기 의 Angular 2공식 자습서 및 양식 의 공식 설명서를 참조하십시오.


9
월요일 (4 일 전)에 Angular로 시작하고 자습서를 수행했기 때문에 뭔가 잘못했다고 확신하지만 FormsModule을 가져 오는 것은 효과가 없었습니다. 그런 다음 to 지시문을 추가 import { FORM_DIRECTIVES } from '@angular/forms';하고 추가했습니다. FORM_DIRECTIVES예, 바인딩이 다시 작동합니다 (rc5 릴리스 이전에 작동했는지 확인하기 위해)
— PetLahev


1
@PetLahev 자습서로 발생한 문제는 당신이 시작했을 때 8 월 7에, 튜토리얼이 릴리스 후보 당당한 8 4.로서을 실행하고 있다는 것입니다, 서로 다른 구문이 릴리스 후보 5에 있습니다
— AJ 제인

5
FORM_DIRECTIVES경우에 따라서 죽었다
— 툴킷

6
SharedModule을 사용하는 경우 FormsModule을 가져와야 할 수도 있습니다.
— Difinity

242

사용의 경우 [(ngModel)]에 각도 2 , 4 및 5 + , 당신은 수입에 필요한 FormsModule 코너 양식에서 ...

또한 그것은의 형태에서이 경로에 각도의 repo 에서 GitHub의 :

각도 / 패키지 / 양식 / src / 지시문 / ng_model.ts

아마도 이것은 언제 어디서나 ng-model을 사용할 수 있기 때문에 AngularJs 개발자 에게는 큰 즐거움이 아니지만 Angular는 원하는대로 사용하기 위해 모듈을 분리하려고 시도함에 따라 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 { }

또한이 Angular4에 대한 의견 시작하는 전류 ngModel의 FormsModule는 :

/**
 * `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독립 실행 형을 적용 할 수 있습니다 ...

[ngModelOptions]="{standalone: true}"

자세한 정보 는 Angular 섹션의 ng_model 을 참조 하십시오.


95

FormsModule을 가져와야합니다.

app.module.ts를 엽니 다.

그리고 라인을 추가

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

과

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

54

이것을 던지면 누군가를 도울 수 있습니다.

AuthModule인증 요구 사항을 처리하기 위해 새로운 NgModule을 만들었다 고 가정하면 FormsModule해당 AuthModule 도 가져와야 합니다.

에서 FormsModuleONLY를 사용하는 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 { }

그런 다음 다른 곳을 AppModule사용하지 않으면 가져 오기를 잊어 버리십시오 FormsModule.


폼 기능을 사용하는 하위 모듈에서 필요했습니다. 높은 계층 구조로는 충분하지 않았습니다.
— Zarepheth

45

간단한 Soultion : app.module.ts에서

실시 예 1

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

imports: [
 BrowserModule,
 FormsModule
 ],

실시 예 2

[(ngModel)]을 사용하려면 app.module.ts에서 FormsModule을 가져와야합니다.

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

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

28
두 예제의 차이점은 정확히 어디에 있습니까?
— Philipp Meissner

내 경우, 내 component.module.ts에 FormsModule를 가져올 수 있었다
— ISFO

40

[(ngModel)]을 사용하려는 모듈에서 FormsModule을 가져옵니다.

여기에 이미지 설명을 입력하십시오


39

이 오류를 제거하기 위해 따라야하는 두 가지 단계가 있습니다.

  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

이 컴포넌트가 루트에있는 경우 루트 모듈 에서 FormsModule 을 가져와야 합니다 (예 : app.module.ts).

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의 일부입니다. 그리고 @ ngular / forms에서 가져 와서 ngModel과 함께 작동해야합니다.

다음과 같이 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.
— Amit Chigadani

@AmitChigadani ReactiveFormModule을 추가하는 것이 내 경우에 오류를 사라지게 한 유일한 것입니다. 저는 Angular 7을 사용하고 있습니다.
— Eternal21

17

나는이 질문이 Angular 2에 관한 것임을 알고 있지만 Angular 4에 있으며 이러한 답변 중 어느 것도 도움이되지 않았습니다.

Angular 4에서 구문은

[(ngModel)]

도움이 되었기를 바랍니다.


15

FormsModule을 올바르게 가져온 후에도 여전히 오류가 발생하면 프로젝트가 컴파일되지 않고 (아마도 다른 오류가 발생할 수 있기 때문에) 터미널 또는 (Windows 콘솔)을 확인하십시오. 솔루션이 브라우저에 반영되지 않았습니다!

필자의 경우 콘솔에 관련이없는 오류가 발생했습니다. 'AtriService'유형에 'retrieveGithubUser'특성이 없습니다.


13

모듈에서 ngModel 을 사용 하려고 하면 FormsModule 을 가져와야 합니다.

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

@NgModule({
  imports: [
    FormsModule,
  ],

})
export class AbcModule { }

나는 app.module.ts에서 이것을 놓쳤다. 감사합니다 Malindu!
— Omzig

11

ngModel 은 FormsModule 에서 제공됩니다. 이러한 종류의 오류가 발생할 수있는 경우가 있습니다.

  1. 컴포넌트가 선언 된 모듈의 가져 오기 배열 (ngModel이 사용되는 컴포넌트)로 FormsModule을 가져 오지 않았습니다.
  2. FormsModule을 다른 모듈에서 상속 된 한 모듈로 가져 왔습니다. 이 경우 두 가지 옵션이 있습니다.
    • FormsModule을 모듈 1과 모듈 2에서 가져 오기 배열로 가져 오십시오. 일반적으로 모듈을 가져 오면 가져 오기 된 모듈에 액세스 할 수 없습니다 (가져 오기는 상속되지 않음).

여기에 이미지 설명을 입력하십시오

  • model2에서도 볼 수 있도록 FormsModule을 module1의 가져 오기 및 내보내기 배열로 선언하십시오.

여기에 이미지 설명을 입력하십시오

  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

app.module을 FormModule 가져 오기

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.component.ts의 선택기를 사용하려고합니다 (예 : <module1-componentA [someInputVariableInModule1]="variableFromHTTPRequestInModule2"> )가 발생합니다 @Input() someInputVariableInModule1module1.componentA.에 있음에도 불구하고 someInputVariableInModule1을 module1.componentA.component.ts 내에서 사용할 수 없다는 오류 .

이 경우 다른 모듈에서 액세스 할 수 있도록 module1.componentA를 공유하려고합니다. 따라서 sharedModule 내에서 module1.componentA를 공유하면 module1.componentA는 다른 모듈 내에서 사용할 수 있으며 (module1 외부), sharedModule을 가져 오는 모든 모듈은 @Input()선언 된 변수를 삽입하는 템플릿에서 선택기에 액세스 할 수 있습니다 .


1
나는이 정확한 문제가 있으며, 당신은 ComponentC에서 componentA를 사용할 수 있도록 모듈을 공유해야한다고 말합니다. 그러나 .. 모듈 1을 어떻게 공유합니까? "모듈 공유"의 구문은 무엇입니까? module1을 내 보낸 다음 module2로 가져 오는 것이 충분히 공유 된 것으로 생각했지만 여전히이 문제가 있습니다.
— Agorilla

2
그래서 자신을 대답, 이것은 당신이 모듈 공유하는 방식입니다 angular-2-training-book.rangle.io/handout/modules/...
— Agorilla

2
죄송합니다. 귀하의 의견이 빠른 것으로 보이지 않았습니다 :) 예, 이것은 SharedModule을 생성하고 거기에 자신의 모듈을 가져 와서 여러 다른 모듈에서 사용하려는 방법입니다. 그런 다음 공유 모듈에서 가져온 모듈을 사용하려는 SharedModule을 가져옵니다.
— Guntram

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나는 같은 오류를 가지고 있지만 다른 관련 모듈 그때 깨달았 우리가 주문에 가져올 필요가 , 내 경우에는 나는 그것을 놓쳤다. 순서가 같아야 그래서 BrowserModule, FormsModule, ReactiveFormsModule.

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

이것은 Type Script 대신 일반 JavaScript를 사용하는 사람들을위한 것입니다. 아래와 같이 페이지 상단에서 양식 스크립트 파일을 참조하는 것 외에도

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

또한 모듈 로더에을로드하도록 지시해야합니다 ng.forms.FormsModule. 변경 후 메소드의 내 imports속성은 NgModule다음과 같습니다.

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

행복한 코딩!


6

RC1에서 RC5로 업그레이드 한 후이 오류가 발생했습니다.

Angular2 빠른 시작 예제를 기반으로 마이그레이션을 완료했습니다 (새 app.module.ts파일 소개, 새 package.json버전 및 누락 된 모듈 포함으로 변경 및 마지막 main.ts으로 부팅하도록 변경). ).

나는 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);

3

app.module.ts에 코드를 추가하십시오.

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

[...]

@NgModule({
imports: [
[...]
FormsModule
],
[...]
})
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.