BACK
Use casesoutputFromObservable — 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-события. Компонент инкапсулирует всю «очистку» ввода.

script.ts // TypeScript
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...