Я думаю, что вы не должны использовать его внутри файла TS, так как асинхронный канал делает подписку и отписку автоматически без утечек.В вашем случае команда Angular просто предлагает использовать излучатели и входные данные для обмена данными между компонентами (и, в основном, с использованием интеллектуальных компонентов, единственные компоненты могут работать и обмениваться данными с другими, также существует стратегия обмена данными с сервисами, которой я не являюсь.большое веселье).Пример для обмена данными между двумя компонентами с использованием эмиттеров и входов путем передачи через родительский элемент:
- componentA:
<!-- template -->
{{ localVar }}
<button (click)="onSendToParent()">Send localVar to parent</button>
И
// typescript
localVar = 'could be anything - objects - strings - numbers';
@Ouput() componentAoutput: EventEmitter<string> = new EventEmitter<string>();
onSendToParent(): void {
this.componentAoutput.emit(this.localVar);
}
- Родитель:
<!-- template -->
{{ fromComponentA$ | async }}
<component-a (componentAoutput)="fromComponentA$.next($event)"></component-a>
<component-b [componentBinput]="fromComponentA$ | async"></component-b>
И
// typescript
fromComponentA$: BehaviourSubject<string> = new BehaviourSubject('initial value');
- компонент B:
<!-- template -->
{{ componentBinput }}
И
// typescript
@Input() componentBinput: string;
// if need you can affect its value to a new created subject
componentBinput$: BehaviourSubject<string> = new BehaviourSubject(this.componentBinput);
Вы можете сделать обмен данными другим способом, используя ту же стратегию, этоСтратегия - это лучшая практика, рекомендованная экспертами по угловым направлениям. Я ответил этим примером, потому что я считаю, что проблемы, возникающие при реализации вашей функции, связаны с обменом данными, а не с манипулированием наблюдаемыми объектами и напоминанием, что это очень плохая практика - вкладывать 2 подписки илииспользуйте подписки на файл TS, когда этого можно избежать, используя асинхронный канал в шаблоне.