Angular 2プロジェクトで、Angular Material オートコンプリート コンポーネントを使用しようとしています。私は自分のテンプレートに以下を追加しました。
<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
ディレクティブが見つからないようです。
'input'の既知のプロパティではないため、 'formControl'にバインドできません
ここで問題は何ですか?
formControl
を使用している間、ReactiveFormsModule
をimports
配列にインポートする必要があります。
例:
import {FormsModule, ReactiveFormsModule} from '@angular/forms';
@NgModule({
imports: [
BrowserModule,
FormsModule,
ReactiveFormsModule,
MaterialModule,
],
...
})
export class AppModule {}
例の.tsを解読しようとするのを忘れてください - 他の人が言っているように、それはしばしば不完全である。
代わりに、ここに丸で囲まれた「飛び出し」アイコンをクリックすると、 完全に機能するStackBlitzの例 が表示されます。
必要なモジュールをすぐに確認できます。
ReactiveFormsModule
のすべてのインスタンスをコメントアウトします。エラーが発生することを確認してください。
Template parse errors:
Can't bind to 'formControl' since it isn't a known property of 'input'.