I have the following code inside my constructor:
this.searchResults = this.searchTerm.valueChanges
.debounceTime(500)
.distinctUntilChanged()
.switchMap(term => this.apiService.search({
limit: this.searchResultsLimit,
term: term
}));
And this is my input
<input type="text" [formControl]="searchTerm" />
You can see the tutorial I followed to get the code here.
My API service method is as followed:
searchCompanies(options): Observable<any[]> {
return this.jsonp.get('api/search', this.formatOptions(options)).map(res => {
return res.json();
});
}
Each time searchTerm
is changed inside my input, the API call is fired. My problem is that the call is fired even when my input is empty (such as typing a query, then backspacing it all).
My question is, how can I only get my observable to fire when the value of `searchTerm is not empty/null?
Most easily just use the filter()
operator to filter out all empty term
s:
this.searchResults = this.searchTerm.valueChanges
.filter(term => term) // or even better with `filter(Boolean)`
.debounceTime(500)
.distinctUntilChanged()
.switchMap(term => this.apiService.search({
limit: this.searchResultsLimit,
term: term
}));