2017-07-14 12 views
0

isTypingのようなものを作成しようとしているので、ユーザーの入力タイプが3秒以下になると検出しなければならないので、ユーザーが入力を停止するかどうかを検出する

 ngOnChanges(searchValue: string) { 
    if (!this.searchChangeObserver) { 
     Observable.create(observer => { 
     this.searchChangeObserver = observer; 
     }).debounceTime(3000) 
     .subscribe((data) => { 
      if (data) { 
      typingStuff(); 
      } 
      else { 
      notTypingStuff(); 
      } 
     }); 
     this.searchChangeObserver.next(searchValue); 
    } 
    } 
} 

これで、ユーザーがnotTypingStuff()を行うのを止めると検出する必要があります。

簡単な方法はありますか?

constructor(){ 
    this.modelChanged 
     .debounceTime(300) 
     .subscribe((data) => { 
     if (data) { 
      typingStuff(); 
     } 
     else { 
      notTypingStuff(); 
     } 
     }); 
} 

をしかし、ユーザーが同様notTypingStuff()を行うには3秒で入力し停止したときに知っておくべき...

+0

これは次のようなものです:http://jsfiddle.net/francescov/FYkYE/ Angular 2? – Stuart2041

+0

'ngModel'と' ng-dirty'と 'ng-pristine'の方法はどうですか?あなたはそれについてAngularのドキュメントで読むことができます:https://angular.io/guide/forms#track-control-state-and-validity-with-ngmodel – Haseoh

+0

@Haseohはよく見えます。例を挙げて答えを投稿できますか? :) – Stuart2041

答えて

0

を私はします:私もこれを使用してい

EDIT

ユーザーが入力している要素の(keyup)イベントにアクセスし、イベントが発生した後の時間が> = 3秒かどうかを確認します。あなたが入力イベントから、観察を作成し、debaunce時間を設定することができます入力していないものについては

+0

はい、私はタイプするたびにAPI呼び出しを行う必要があります。また、テキストを削除したい場合は、戻り値もキーであるためAPIも呼び出されます。 – Stuart2041

1

HTML:

<input #yourElement [(ngModel)]="yourVar"/> 

コンポーネント:

@ViewChild('yourElement') yourElement: ElementRef; 

ngAfterViewInit() { 
    Observable.fromEvent(this.yourElement.nativeElement, 'input') 
     .map((event: Event) => (<HTMLInputElement>event.target).value) 
     .debounceTime(3000) 
     .distinctUntilChanged() 
     .subscribe(data => notTypingStuff()); 
} 

この方法で、あなたの方法入力が変更された後、つまりユーザーが入力をやめた後にのみ3000が実行されます。

+0

いいえ、どうすればリセットできますかユーザーが入力を再開したときの現在のデバウンス時間? –

関連する問題