मैं अपने आवेदन में कोणीय प्रतिक्रियाशील रूप का उपयोग कर रहा हूं। और जब उपयोगकर्ता टेक्स्ट बॉक्स में यूआरएल टाइप करता है, तो मैं सर्वर पर AJAX अनुरोध भेज रहा हूं।

 this.myForm.valueChanges.subscribe(form => {
      if (this.myForm.valid) {
        // call ajax for this.myForm.value.url
      }
 }

लेकिन जब मैं अक्षरों को क्रम में टाइप करता हूं "h", "ht", "http", अनुरोध तुरंत भेज रहा है। मैं टाइप पूरा करने के बाद अनुरोध भेजना चाहता हूं। तो मुझे लगता है कि प्रतीक्षा के लिए एक पाइप की जरूरत है, लेकिन कौन सा?

0
barteloma 4 फरवरी 2020, 16:03

2 जवाब

सबसे बढ़िया उत्तर

आप debounceTime rxjs ऑपरेटर (मिलीसेकंड पैरामीटर के साथ) का उपयोग कर सकते हैं:

import {debounceTime} from "rxjs/operators";

this.form.valueChanges.pipe(
debounceTime(1000)
).subscribe(...)

यदि आप आगे जाना चाहते हैं और 2 सदस्यता (फॉर्म और एपीआई कॉल के लिए) करने से बचना चाहते हैं, तो आप switchMap rxjs ऑपरेटर का उपयोग कर सकते हैं:

import {debounceTime, switchMap} from "rxjs/operators";

this.form.valueChanges.pipe(
  debounceTime(1000),
  switchMap(value => {
    if (this.form.valid) {
    return this.api.save(value.url)
    }
  })
).subscribe(// return the result of the api call)
0
Gérôme Grignon 4 फरवरी 2020, 16:58

शर्त के साथ आपको यही चाहिए:

उदाहरण:

import {debounceTime} from "rxjs/operators";

this.myForm.valueChanges.pipe(
  this.myForm.valid,
  debounceTime(1000))
).subscribe(res => this.data = res); 
0
Oussail 4 फरवरी 2020, 16:25