【发布时间】:2019-07-21 18:55:50
【问题描述】:
我有两个兄弟组件,它们需要访问在可观察对象中检索到的数据,该可观察对象是基于用户输入可观察对象在服务中动态创建的。我很难理解如何让search-list 组件收听search 组件创建的可观察对象。我应该将服务创建的最后一个搜索 observable 存储为搜索服务中的另一个 observable,我应该将搜索 observable 存储在 search 组件中并通过 ref 访问,还是应该在观察者在 @ 中完成后发出数据987654324@组件?
search.service.ts
export interface SearchApi {
data: string[]
}
export class SearchService {
loading: EventEmitter<boolean> = new EventEmitter();
constructor(private httpClient: HttpClient) {
}
search(terms: Observable<string>){
return terms.pipe(debounceTime(400))
.pipe(distinctUntilChanged())
.pipe(switchMap(term => {
this.loading.emit(true);
return this.searchEntries(term);
}))
.pipe((data) => {
this.loading.emit(false);
return data;
});
}
searchEntries(term){
return this.httpClient.post<SearchApi>(this.baseUrl,term);
}
}
search.component.ts
import { Subject, Observable } from 'rxjs';
export class SearchComponent implements OnInit {
searchTerm$ = new Subject<string>();
constructor(private searchService: SearchService) {
searchService.loading.subscribe(isLoading => {
console.log(`Is loading: ${isLoading}`);
});
searchService.search(this.searchTerm$).subscribe(results => {
console.log(`Search results ${results}`);
});
}
}
search-list.component.ts
export class SearchListComponent implements OnInit {
constructor(private searchService: SearchService) {
searchService.loading.subscribe(isLoading => {
console.log(`Is loading: ${isLoading}`);
});
/* Not sure how I would subscribe to observable that search.service.ts created */
/*
searchService.search().subscribe(results => {
console.log(`Search results ${results}`);
});
*/
}
}
【问题讨论】:
标签: angular rxjs observable