2017-09-21 13 views
0

以下のコードを使用して、コンポーネントの非同期検索機能を提供しています。検索が完了したら、コンポーネントのメソッドから結果をクリアするにはどうすればよいですか? searchResultsを空の配列に設定すると、検索結果の配列ではなくなり、検索はもはや機能しなくなります。選択が行われると、結果をクリアして、ユーザーが再び検索できるようにする必要があります。角度4の明確な検索結果

searchResults: Observable<any>; 
this.searchResults = 
     this.form.controls['search'].valueChanges 
     .debounceTime(200) 
     .switchMap(query => this.search.searchPeople(query)); 

ここでテンプレートコードは次のとおりです。

<md-input-container style="width:500px"> 
    <input mdInput formControlName="search" placeholder="Search Name" /> 
</md-input-container> 

     <div *ngFor="let person of searchResults | async"> 
     <p><button md-raised-button color="primary" 
      (click)="selectPerson(person)"> 
      Select</button> {{person.firstName}}</p> 
     <p><img [src]="person.photo.url"/></p> 
     <hr/> 
     </div> 

や検索方法:

searchPeople(query){ 
    return this.http.get(`${BASE_URL}?q=${query}`) 
     .map((res:Response) => res.json()) 
     .map(json => json.items); 
    } 
+0

私たちにいくつかのコンテキストを与えてください...あなたはどこにオブザーバブルをサブスクライブしますか? searchPeopleメソッドの再利用は何ですか? – rick

+0

@rickもっと追加しました。 thx – beachCode

+0

は依然として購読しています。しかしマップを使用しているので、それは配列でなければなりません – rick

答えて

1

あなたは結果を消去します件名で検索結果をマージすることができます。

clearSearch = new Subject(); 
searchResults: Observable<any>; 

... 

this.searchResults = this.form.controls['search'].valueChanges 
    .debounceTime(200) 
    .switchMap(query => this.search.searchPeople(query)) 
    .merge(this.clearSearch.mapTo([])); 

次に、ちょうどお電話ください:

this.clearSearch.next(); 
+0

は魅力的に働いた!どうも – beachCode

関連する問題