Angular: правильный способ получения результатов после изменения фильтра

#angular #typescript #subject-observer

#angular #typescript #субъект-наблюдатель

Вопрос:

В моем простом приложении у меня есть FilterComponent, ListComponent и один сервис (я называю его GithubService).

Мне нужно, чтобы это поисковое слово было введено в адресе FilterComponent через http на github и возвращало результаты в ListComponent.

 export class GithubService {
  baseUrlSearch ="https://api.github.com/search";       

 initResponse:IResponse = {total_count:0,incomplete_results:false,items:[]}

    //subject = new Subject<IResponse>();
    subject = new BehaviorSubject<IResponse>(this.initResponse);

   constructor(private http: HttpClient) {  }


public setSearch(newSearchText:string):void{
  if (newSearchText.length<=3) return;
  const url=`${this.baseUrlSearch}/users?q=${newSearchText}`;
  this.http.get<IResponse>(url).pipe(debounceTime(500)).subscribe(
    res=> this.subject.next(res));      
}
public getResults():Observable<IResponse>
{
 return  this.subject.asObservable();
}

// ListComponent class
export class ListComponent implements OnInit {

  response$: Observable<IResponse>;
  constructor (private service :GithubService)
  {}
  ngOnInit(): void {
    this.response$= this.service.getResults();
  }
}
  

О чем я не знаю, так это о том, что служба подписывается каждый раз, когда изменяется newSearchText.

Должен ли я оставаться на месте или как-то реорганизовывать, или, может быть, каждый раз отписываться?

Комментарии:

1. Http-вызовы являются холодными наблюдаемыми: они выдают свое значение, затем они умирают. Вам не нужно отписываться от них.

2. Я думал, что cold observable выдает все значения, когда слушатель подписывается на него. Меня не волнует какая-либо подписка на http?

3. Наблюдаемые передают свои значения наблюдателям, когда на них подписаны. Горячие наблюдаемые сохраняются открытыми (что означает, что в какой-то момент вам придется отменить ввод, чтобы избежать утечек), но холодные наблюдаемые просто умирают после отправки их значений. В случае HTTP-вызовов это единственное значение. В Интернете существует множество статей, если у вас есть свободное время!

4. Статья — это именно то, что мне нужно, спасибо!