2017-03-13 6 views
1

「keyUp」イベントで呼び出される関数をデバウンスするにはどうすればよいですか?ここで 角2 - keyUpイベントのデバウンス

は私のコードです:

My機能

private handleSearch(searchTextValue: string, skip?: number): void { 
    this.searchTextValue = searchTextValue; 
    if (this.skip === 0 || typeof skip === "undefined") { 
     this.skip = 0; 
     this.pageIndex = 1; 
    } else { 
     this.skip = skip; 
    } 
    this.searchTextChanged.emit({ searchTextValue: searchTextValue, skip: this.skip, take: this.itemsPerPage }); 
} 

マイHTML

<input type="text" class="form-control" placeholder="{{ 'searchquery' | translate }}" id="searchText" #searchText (keyup)="handleSearch(searchText.value)"> 

Bassically私が達成しようとしていることhandleSearchが呼び出されるということですユーザーが入力をやめた後すぐに。

私はlodashの_debounce()を使用できることを知りましたが、これを私のkeyUpイベントにどのように入れるのか分かりませんでした。

答えて

7

rxjs/Subjectを作成し、keyupで.next()を呼び出し、希望するdebounceTimeでサブスクライブすることができます。

私はそれが正しい方法であるかどうかは分かりませんが、うまくいきます。

private subject: Subject<string> = new Subject(); 

ngOnInit() { 
    this.subject.debounceTime(500).subscribe(searchTextValue => { 
    this.handleSearch(searchTextValue); 
    }); 
} 

onKeyUp(searchTextValue: string){ 
    this.subject.next(searchTextValue); 
} 

HTML:

<input (keyup)="onKeyUp(searchText.value)"> 
+0

は、どのように私はngOnInit() 'にパラメータを渡すことができます{ this.subject.debounceTime(500).subscribe(RES => {//何かをします}); } '? – Nicolas

+0

検索クエリをonKeyUp()に渡してから.next()に渡すと、サブスクリプションの 'res'変数になります。文字列を扱っている場合は、件名から件名に変更してください。答えを編集しましょう。 – Ploppy

+0

と1つのオプションのパラメータがある場合は?私はそれらをオブジェクトに入れますか? OPで、私は 'searchTextValue'と' skip'に依存しています。これはオプションです – Nicolas

関連する問題