'입력'의 알려진 속성이 아니므로 'formControl'에 바인딩 할 수 없음-Angular2 Material Autocomplete issue


355

Angular 2 프로젝트에서 Angular Material Autocomplete 구성 요소 를 사용하려고합니다 . 템플릿에 다음을 추가했습니다.

<md-input-container>
   <input mdInput placeholder="Category" [mdAutocomplete]="auto" [formControl]="stateCtrl">
</md-input-container>

<md-autocomplete #auto="mdAutocomplete">
   <md-option *ngFor="let state of filteredStates | async" [value]="state">
      {{ state }}
   </md-option>
</md-autocomplete>

다음은 내 구성 요소입니다.

import {Component, OnInit} from "@angular/core";
import {ActivatedRoute, Router} from "@angular/router";
import {FormControl} from "@angular/forms";

@Component({
    templateUrl: './edit_item.component.html',
    styleUrls: ['./edit_item.component.scss']
})
export class EditItemComponent implements OnInit {
    stateCtrl: FormControl;
    states = [....some data....];

    constructor(private route: ActivatedRoute, private router: Router) {
        this.stateCtrl = new FormControl();
        this.filteredStates = this.stateCtrl.valueChanges.startWith(null).map(name => this.filterStates(name));
    }
    ngOnInit(): void {
    }
    filterStates(val: string) {
        return val ? this.states.filter((s) => new RegExp(val, 'gi').test(s)) : this.states;
    }
}

다음과 같은 오류가 발생합니다. formControl지시문을 찾지 못한 것 같습니다 .

'입력'의 알려진 속성이 아니므로 'formControl'에 바인딩 할 수 없습니다.

여기서 문제는 무엇입니까?


5
Pengyy의 답변에 대한 한 가지 의견 :을 사용하는 동안 rootModule이 아닌 모듈formControl 로 가져와야 ReactiveFormsModule합니다 . 기능 모듈에서 사용하는 경우를 대비 하여. FormControl
킹 존

비슷한 경우가 있으며 내 기능에 ReactiveFormsModule을 가져옵니다. 유일한 차이점은 'formControl'대신 'formControlName'에 바인딩하고 싶다는 것입니다. 메시지는 동일한 구조를 갖는다
Искрен Станиславов에게

여기에 정답이 있습니다. 그러나 누군가가 여전히 (나처럼) 붙어 있고 오류가 formcontrol아니라 (소문자) 라고 말하는 경우 formControl— webpack html-loader를 통해 템플릿을 실행하는 경우 다음과 같이 도움이 될 것입니다. stackoverflow.com/a/40626329/287568
Ben Boyle

답변:


758

을 사용하는 동안 배열 formControl로 가져와야 ReactiveFormsModule합니다 imports.

예:

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

@NgModule({
  imports: [
    BrowserModule,
    FormsModule,
    ReactiveFormsModule,
    MaterialModule,
  ],
  ...
})
export class AppModule {}

173
실제로, 왜 이것이 문서의 material.angular.io/components/autocomplete/view 에 있지 않습니까 ? 각도에 대한 마법의 미지의 의존성.
Vadorequest

4
@Vadorequest : 그 문서들은 머티리얼을위한 것입니다. 그들이 사용하는 Angular의 모든 기능에 대해 문서를 추가하기 시작하면 결국 Angular 문서와 재료 문서 사이에 많은 중복이 생겨 결국 동기화되지 않을 수 있습니다. 그러나 나는 이것에도 머리를 긁는 데 많은 시간을 보냈다. 당신은 항상 재료 GitHub의의의 repo에 문제를 제출할 수 : github.com/angular/material2/issues을
에릭 Ihli에게

22
IMHO의 변명은 아닙니다. 그들은 일종의 팁으로 연결되는 "일반적인 문제 해결"에 대해 무언가를 할 수 있습니다. 그들의 라이브러리가 다른 기본 각도 의존성에 의존한다면, 그 깊이를 강조하는 것도 그들의 임무입니다. 특히이 경우 프레임 워크는 "material.angular.io"에 있습니다.
Vadorequest

3
또는 사용중인 것을 기반으로 이러한 유형의 모듈을 자동으로 가져 오는 표준 툴링입니다. 웹팩 작업처럼 들리십니까?
ferr

자동 완성 문서에서 Stackblitz를 살펴보면 ReactiveFormsModule을 사용해야합니다. 더 일반적으로, 구성 요소는 ... 인 페이지 코드보다 그 Stackblitz 데모에 자세한 내용이있을 것이다
데이비드 하다드

42

다른 사람들이 종종 불완전하다고 말했듯이 예제 .ts를 해독하는 것을 잊어 버려라.

대신 여기에 동그라미 표시된 '팝 아웃'아이콘을 클릭하면 완전히 작동하는 StackBlitz 예제가 표시 됩니다.

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

필요한 모듈을 신속하게 확인할 수 있습니다.

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

의 인스턴스를 주석 처리 ReactiveFormsModule하면 오류가 발생합니다.

Template parse errors:
Can't bind to 'formControl' since it isn't a known property of 'input'. 

고마워, 올바른 방향으로 나를 지적하고 미래에 어디를 볼지 알고!
m.edmondson


-1

템플릿에 일반 matInput을 추가하여 시작하십시오. 입력 값을 추적하기 위해 ReactiveFormsModule의 formControl 지시문을 사용한다고 가정합니다.

반응성 양식은 시간이 지남에 따라 값이 변하는 양식 입력을 처리하기위한 모델 중심 접근 방식을 제공합니다. 이 안내서는 간단한 양식 제어를 작성 및 업데이트하고, 그룹에서 여러 제어를 사용하여 진행하고, 양식 값을 검증하고, 고급 양식을 구현하는 방법을 보여줍니다.

import { FormsModule, ReactiveFormsModule } from "@angular/forms"; //this to use ngModule

...

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