2016-12-23 12 views
6

क्या टेम्पलेट निर्देश (ngModelChange) पर बहस करने का कोई तरीका है?कोणीय 2: बहस (ngModelChange)?

या, वैकल्पिक रूप से, इसे एक अलग तरीके से करने का सबसे कम दर्दनाक तरीका क्या है?

निकटतम जवाब मैं देख रहा हूँ यह है: How to watch for form changes in Angular 2?

तो, उदाहरण के लिए, मैं एक पाठ इनपुट है, मैं अद्यतन onChange प्राप्त करना चाहते हैं, लेकिन मैं हर कीस्ट्रोक से इसे नीचे Debounce हैं:

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

Debounce onFieldChange()

+0

अपने कोड साझा करें, क्या आप ngModelChange साथ कर रहे हैं? – Milad

+0

https://angular.io/docs/ts/latest/tutorial/toh-pt6.html#!#search-by-name यह लिंक आपकी मदद करेगा – Devansh

+0

या तो देवंस के प्रस्ताव का उपयोग करते हुए यदि आपका इरादा है तो बहस करना एक 'पर्यवेक्षक'। अन्यथा आप 'onFieldChange()' के लिए एक रैपर विधि लिख सकते हैं, जो इसे अस्वीकार कर देगा और 'ngModelChange()' में कॉल किया जाएगा। – naeramarth7

उत्तर

3

आप debounceTime जोड़ने के लिए है, जबकि http कर फोन आप Subject जो उपयोग करने के लिए बहुत आसान है उपयोग कर सकते हैं चाहता है तो। जिसे कोणीय 2 tutorial - HTTP में भी समझाया गया है।

10

यदि आप 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); 
    } 
}