2016-12-23 30 views
6

Có cách nào để đưa ra chỉ thị mẫu (ngModelChange) không?Góc 2: Gỡ lỗi (ngModelChange)?

Hoặc, cách khác, cách đau đớn nhất để làm điều đó theo một cách khác là gì?

Câu trả lời gần nhất tôi thấy là thế này: How to watch for form changes in Angular 2?

Vì vậy, ví dụ, tôi có một đầu vào văn bản, tôi muốn nhận được onChange cập nhật, nhưng tôi muốn debounce nó xuống từ mỗi tổ hợp phím:

<input type="text" class="form-control" placeholder="Enter a value" name="foo" [(ngModel)]="input.event.value" (ngModelChange)="onFieldChange($event, input)"> 

debounce onFieldChange()

+0

Chia sẻ mã của bạn, bạn đang làm gì với ngModelChange? – Milad

+0

https://angular.io/docs/ts/latest/tutorial/toh-pt6.html#!#search-by-name có thể là liên kết này sẽ giúp bạn – Devansh

+0

Hoặc sử dụng đề xuất của Devansh nếu bạn đang có ý định là để debounce một 'có thể quan sát'. Nếu không, bạn có thể viết một phương thức wrapper cho 'onFieldChange()', nó sẽ debounce nó và được gọi trong 'ngModelChange()'. – naeramarth7

Trả lời

3

Nếu bạn muốn thêm debounceTime trong khi làm http gọi cho bạn có thể sử dụng Subject mà là rất dễ sử dụng. Điều này cũng được giải thích trong angular2 tutorial - HTTP.

10

Đây là cách ít gây đau đớn khi nhấn phím tổ hợp nếu bạn không muốn sử dụng phương pháp formcontrol.

search.component.html

<input type="text" placeholder="Enter a value" name="foo" [(ngModel)]="txtQuery" (ngModelChange)="onFieldChange($event)"> 

search.component.ts

export class SearchComponent { 

     txtQuery: string; // bind this to input with ngModel 
     txtQueryChanged: Subject<string> = new Subject<string>(); 

     constructor() { 
      this.txtQueryChanged 
      .debounceTime(1000) // wait 1 sec after the last event before emitting last event 
      .distinctUntilChanged() // only emit if value is different from previous value 
      .subscribe(model => { 
       this.txtQuery = model; 

       // Call your function which calls API or do anything you would like do after a lag of 1 sec 
       this.getDataFromAPI(this.txtQuery); 
      }); 
     } 

    onFieldChange(query:string){ 
     this.txtQueryChanged.next(query); 
    } 
} 
Các vấn đề liên quan