У меня есть два родственных компонента, которым требуется доступ к данным, полученным в наблюдаемой, которая динамически создается в службе на основе наблюдаемой пользовательской информации.Я изо всех сил пытаюсь понять, как я могу заставить компонент search-list
слушать наблюдаемое, созданное компонентом search
.Должен ли я хранить последнюю наблюдаемую поисковую информацию, созданную службой, как другую наблюдаемую в поисковой службе, должен ли я хранить наблюдаемую поисковую информацию в компоненте search
и доступ через ссылку, или я должен отправить данные, как только наблюдатель завершит работу в search
компонент?
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}`);
});
*/
}
}