Use cases/outputFromObservable — Observable как component output
Use cases · 38 練
outputFromObservable — Observable как component output
Паттерн
Компонент поиска должен отдавать родителю «search changed» события. Не каждое нажатие клавиши, а очищенные, debounced значения. outputFromObservable(search$) — output, который сам берёт значения из готового stream.
Какую проблему решаем
Без этого моста компонент вынужден держать @Output() search = new EventEmitter(), в keyup-handler делать debounce руками или через ngOnInit подписку с emitter.emit() внутри. Получается каша: UI-логика, debounce, emit смешаны в одном методе.
Операторы и зачем они нужны
Subject — input changes компонента (или valueChanges от form control).
debounceTime — ждём паузу в наборе.
distinctUntilChanged — игнорируем повтор того же значения.
map — формируем payload для родителя.
Подводные камни
Сначала debounce → потом emit. Если поставить debounce после emitter — родитель уже получит шум.
switchMap для HTTP поиска нужен внутри родителя или сервиса, а не в выходном потоке компонента.
Output stream не должен падать error-ом — это сломает родителя. Внутреннюю валидацию обрабатывайте до output.
Что в итоге получаем
Родитель получает только стабильные, уникальные search-события. Компонент инкапсулирует всю «очистку» ввода.