2016-08-01 37 views
0

我從Angular 2文檔中學到的是如何使用一個詞條流進行實時搜索(只有一個參數的搜索)。如何使用Angular 2中的兩個術語進行實時搜索?

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)); 

我需要的是使雙參數餐館實時搜索(我已經創建了一個Web服務休息接受兩個參數:長期和地區,並提供餐廳返回列表)是什麼。

回答

0

使用combineLatest()創建一個Observable ...結合兩個原始可觀測值的最新值。

private termObservable = new Subject<string>(); 
private regionObservable = new Subject<string>(); 
private criteriaObservable = 
    Observable.combineLatest(this.termObservable, 
          this.regionObservable, 
          (term, region) => {term, region}); 

然後,就像你在你的問題做的,你可以使用criteriaObservable實現了搜索。傳遞給switchMap()的函數將獲取包含最近輸入的術語和最近輸入的區域的對象。

確保一個比較函數傳遞給distinctUntilChanged(),因爲它使用===在默認情況下對值進行比較,並且你更想長期/地區的元組相等時,這兩個詞和地區都是平等的:

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)); 
+0

**搜索**本身怎麼樣?如何結合這兩個語句'this.termObservable .next(term)'和'this.regionObservable.next(region)'? – MChaker

+0

查看我的最新編輯。 –

相關問題