それは本当にだろうので、私はReactiveFormsModuleを使用することをお勧めこの問題を解決するのは簡単です。
まずFormGroupを定義しましょう。フォームグループは1つのフォームコントロールで構成されます。
form: FormGroup;
constructor(formBuilder: FormBuilder){
this.form = formBuilder.group({
search: ''
});
}
今、私たちは私たちの簡単なフォームを定義したので、私たちが興味を持っていることは、ユーザーの種類として要求を送信しているので、基本的には私たちのフォームコントロールの値が変更された時はいつでも。私たちは、このような観測valueChanges
を購読することができます:
ngOnInit(){
this.form.get('search').valueChanges
.subscribe(value => this.listingService.getListings(value)));
}
は、これは明らかに動作しますが、これに伴う問題は、我々はすべての単一の文字、ユーザがタイプのリクエストを送信したくないということです。私たちは彼が終わるまで待っています。
this.form.get('search').valueChanges
.debounceTime(1000)
.subscribe(value => this.listingService.getListings(value)));
我々はまた、(getListings
も、観察を返すので)サブスクリプションの連鎖を作ることを避けるためにswitchMap
演算子を使用します。私たちはdebounceTime
演算子を使用していることを修正することができます。ユーザーが入力したすべてのものを削除したと仮定して、空の文字列でリクエストを送信したくないため、最後にフィルタを追加する必要があります。そして、我々はそのためfilter
オペレータを持っている:
this.form.get('search').valueChanges
.filter(value => value)
.debounceTime(1000)
.switchMap(value => this.listingService.getListings(value))
.subscribe(listings => this.listings = listings);
テンプレートは、このようになります。応答のための
<form [formGroup]="form">
<input type="text" formControlName="search">
</form>
感謝を。あなたは私に教えてもらえますか?getListings関数の値を 'listings'プロパティに渡してページに表示させるにはどうすればいいですか? 'getListings'はサーバを呼び出してObservableも返すことに注意してください。 – CodyBugstein
そして、このフォームをビューにどのように表示しますか? – CodyBugstein
私は私の答えを編集しました。私はあなたがこれらのコンセプトに精通していると思っていました。とにかく、何が起こっているのかを理解するためにドキュメントを読んで、すべてを正しくインポートすることをお勧めします。 – Christian