2016-12-19 16 views
1

私はAngularJSプロジェクトに戻る必要がありました。私は長い時間前に作ったものです(Angular 2を深く覚えていれば痛いです)。モデル変更にdebounceを使用して検索バーの入力を置き換える必要があります。私たちが行ったよりもはるかに多くのトラフィックがあるからです。各キーストロークでリクエストを送信しても問題ありませんでしたが、これは現在の訪問者の数には受け入れられません。AngularJSデバウンスが意図したとおりに動作しない

角度2では、rxjsのデバウンスが問題を解決しますが、AngularJSでは意図したとおりに動作しません。このバグは私のワークフローにとって重要ではありませんが、これが実際に意図された動作かどうか不思議です。何デバウンスはどうしたら

rxjsで

は、次のとおりです。

User interactions(keystrokes, each dash represents 100ms) 
1--2---3----4-5-6-7----8-----9----- 
1----2----3----5----7----8----9---- 
^ .debounceTime(500) 

あなたが見ることができるように、彼らは行動に置き換えられてしまいますと、アクション4と6は無視されます(500msのタイムスパンで)それらの後にトリガ。

しかしAngularJSで、ng-model-options="{ debounce: 500 }"を使用して、私が手:無の500ミリ秒があるたび

User interactions(keystrokes, each dash represents 100ms) 
1--2---3----4-5-6-7----8-----9----- 
1----------------------8-----9----- 
^ AngularJS 

この例では、AngularJSは変更のみをピックアップ。アクション1〜8の間の継続時間は500ms未満であるため、その期間中の変更は更新されません。これは意図された動作ですか?

答えて

1

デバウンスタイマーは、ユーザーが入力を変更するたびにリセットされます。 From the Angular docs:

updateOnとデバウンスプロパティを使用すると、モデル更新および/またはタイマーが満了したときに実際の更新が唯一の場所をとるようにデバウンス遅延をトリガするイベントのカスタムリストを指定することができます。 このタイマーは、別の変更が行われた後にリセットされます

+0

ありがとうございました! AngularJSまたはrxjsのデバウンス方法がより適切な振る舞いであるかどうか、私はちょうど興味がありました。どう思いますか?あなたはそれが私が質問で提供したグラフ1または2のように行動すべきだと思いますか? – borislemke

+0

私はそれが一般的に、ユーザーが電話をする前に自分が望むものを書き終えるのを待つのがより理にかなっていると思うので、角度のアプローチが適切だと思います。 – evsheino

+0

もう少し研究をした後、私はあなたの意見をバックアップするものを見つけました:デバウンスの定義: "呼び出され続ける限り、関数は停止した後に呼び出されますNミリ秒間呼び出されています。 "情報をありがとう! – borislemke

関連する問題