2017-05-16 9 views
0

カスタムが入力を書きますが、ボタンをクリックするのを待たずに、角度2で数時間(数ミリ秒または数秒)後に入力テキストから値を取得します。angular2に値を入力するデバウンス

私はこれを試しましたが、debounceTimeを使用しても、すべてのキー入力で値が送信されます。

誰もが自分のコードを修正するために私を助けてください、私はデバウンスと、観察について学ぶために試してみて、これは私が理解です:

component.html:

<md-card-title *ngIf="!edit">{{card.title}}</md-card-title> 
<input *ngIf="edit" type="text" [(ngModel)]="card.title" (ngModelChange)='rename()'/> 

component.ts

newTitle: string; 
modelChanged: Subject <string> = new Subject <string>(); 

constructor() 
this.modelChanged 
    .debounceTime(500) //before emitting last event 
    .distinctUntilChanged() 
    .subscribe(model => this.newTitle = model); 
} 

rename(): void { 
    this.renameRequest.emit(this.newTitle); 
} 
+0

この回答はhttpを参照してください:

<input *ngIf="edit" type="text" #input="ngModel" [(ngModel)]="card.title" (ngModelChange)='rename()'/> 

そして、あなたのクラスここで

newTitle : string; @ViewChild('input') input; constructor() } ngAfterViewInit(){ this.input.valueChanges .debounceTime(500) before emitting last event .distinctUntilChanged() .subscribe(model => (value)=>{ console.log('delayed key press value',value); this.rename(value) }); } rename(value): void { this.renameRequest.emit(value); } 

内部

は、あなたも怒鳴るようmodelChangeを購読することができますPlunker

です/ /stackoverflow.com/questions/32051273/angular2-and-debounce –

答えて

2

まあ、そこに多くのことを達成するための方法のがあるが、ここでは1ワットでありますAY:

ngAfterViewInit(){ 
     this.input.update // this is (modelChange) 
      .debounceTime(500) before emitting last event 
      .distinctUntilChanged() 
      .subscribe(model => (value)=>{ 
        console.log('delayed key press value',value); 
       }); 

} 
+0

yeh、値は@ViewChild( 'input')入力に保存されますが、rename()関数は呼び出されません。 – Salma

+0

私の編集をご覧ください。 – Milad

+0

このエラーが発生しました:TypeError:未定義の 'valueChanges'プロパティを読み取ることができません。 – Salma

関連する問題