web-dev-qa-db-ja.com

Angular 6-rxjsパイプがvalueChangesで機能しない

テキスト入力付きの反応フォームがあります。 TypeScriptで簡単にアクセスできるように、次のように宣言しました。

get parentId(): FormControl {
    return this.addForm.get("parentId") as FormControl;
}

この部分は機能し、コントロールは適切にアクセスされます。

これを行うと、ngOnInitで次のようになります。

this.parentId.valueChanges.subscribe(() => console.log("Changed"));

予想どおり、入力で変更されたすべての文字でコンソールログが実行されます。しかし、私がこれをすると:

this.parentId.valueChanges.pipe(tap(() => console.log("Changed")));

何も起こりません。エラーなし、何もありません。 mapやswitchMapなども使ってみましたが何も動きません。パイプはvalueChangesでは機能しないようです。私はコードのどこか別の監視対象で問題なくpipeメソッドを使用しています。

そして、デバウンスやマップなどのためにここでパイプを使用する必要があります。

私が間違っていることは何か考えていますか?

-編集-

これは、オートコンプリートコンポーネントのAngular Material siteからのコード例です。

ngOnInit() {
   this.filteredOptions = this.myControl.valueChanges
       .pipe(
          startWith(''),
          map(val => this.filter(val))
       );
}

最後にサブスクライブはなく、サンプルは機能します。

4
Matteo Mosca

オブザーバブルをアクティブにするには、サブスクライブする必要があります。

ngOnInit() {
   this.filteredOptions = this.myControl.valueChanges
       .pipe(
          startWith(''),
          map(val => this.filter(val))
       ).subscribe();
}
14
Sajeetharan