web-dev-qa-db-ja.com

Angular 6 upgrade:debounceTimeはSubjectのプロパティではありません

アプリをAngular 5からAngular 6.にアップグレードしようとしています。 https://update.angular。 io / 少なくとも私はやったと思う。

エラーは次のとおりです。

Property 'debounceTime' does not exist on type 'Subject<string>'.

また、私のコンポーネントはdebounceTimeインポートを失いました。 ngアップデートで削除されたと思います。

11
Logan_B

@ Siva636と@Andrew Lobbanの助けを借りて解決しました。

パイプを使用する必要がありました:

  this.field$.pipe(
      debounceTime(400),
      distinctUntilChanged())
16
Logan_B

Angular 6.1.8の場合、以下の例のようにパイプをインポートして追加するだけです

_import {debounceTime} from 'rxjs/operators';_

次に、監視可能なサブスクライブメソッドの直前のフィールドで、次のようにpipe(debounceTime(1000))を呼び出します。

emailControl.valueChanges.pipe(debounceTime(1000)).subscribe(value => this.setMessage(emailControl));

そしてそれだけです、それは@tiagoの答えの更新された答えです-彼女がconst debouncetimeを定義しているところで-私たちは実際にconstとpipeを使う必要はありません。

6
Heena Manglani

Reactivexのドキュメントに従って、observableパイプにもサブスクライブする必要があります。

.pipe(
    debounceTime(500),
    distinctUntilChanged(),
    map((val) => {
        ...
    })
)
.subscribe();

オブザーバがサブスクライブするまでアイテムの放出を開始しない場合、オブザーバブルは「コールド」オブザーバブルと呼ばれます。

5
jmuhire

遅れて申し訳ありませんが、今日この問題が発生し、このように修正しました。この問題を次のように解決します。最初のインポートは次のようになります。

import {debounceTime} from 'rxjs/operators';
import {pipe} from 'rxjs'

次に、このようなconstを作成します(パイプを複製せずに直接やろうとしましたが、うまくいきませんでしたので、この解決策を見つけました):

const debouncetime = pipe(debounceTime(1000));

そして、例えばあなたが購読する前にそれを使用して、私はメッセージで電子メールバリデータをやっていた:

const emailControl = this.registerForm.get('email');
    emailControl.valueChanges
     .pipe(debouncetime)
     .subscribe(value => this.setEmailMessage(emailControl))

その最善の解決策かどうかはわかりませんが、完全に機能します。私はそれが何かを助けることを願っています!

0
Tiago Neiva