angularjs - How to make a live search using two streams of terms in Angular 2? -


what learned angular 2 docs how make live search using 1 stream of terms (a search 1 parameter).

private searchtermstream = new subject<string>(); search(term: string) { this.searchtermstream.next(term); } items: observable<string[]> = this.searchtermstream   .debouncetime(300)   .distinctuntilchanged()   .switchmap((term: string) => this.wikipediaservice.search(term)); 

what need making live search restaurants 2 parameters (i have created rest webservice accepting 2 parameters: term , region, , returning list of available restaurants).

use combinelatest() create observable... combining latest value of 2 original observables.

private termobservable = new subject<string>(); private regionobservable = new subject<string>(); private criteriaobservable =      observable.combinelatest(this.termobservable,                               this.regionobservable,                               (term, region) => {term, region}); 

then, you're doing in question, can use criteriaobservable implement search. function passed switchmap() take object containing latest entered term , latest entered region.

make sure pass comparison function distinctuntilchanged(), because uses === compare values default, , rather want tuples of term/region equal when both terms , regions equal:

items: observable<string[]> = this.criteriaobservable   .debouncetime(300)   .distinctuntilchanged((o1, o2) => o1.term === o2.term && o1.region === o2.region)   .switchmap(criteria => this.restaurantservice.search(criteria.term, criteria.region)); 

Comments