Аттила Чаньи, у вас есть (потенциально) большая проблема, чем описанная в этой статье.
Скажем, для примера, родительский компонент использует субъект (на самом деле не имеет значения, какой субъект) в качестве наблюдаемого источника, который будет передан с помощью Input дочернему MyComponent и он выдаст только одно значение, как показано ниже:
@Component({ ... template: `<my-component [words$]="src$"></my-component>` ... }) export class ParentComponent implements OnInit { private _src = new Subject<string>(); src$ = this._src.asObservable(); ngOnInit() { /* * illustrates some business logic * which will happen in future */ setTimeout(() => { this._src.next("some value"); }, 3000); } }
Через некоторое время вызывается функция ngOnDestroy MyComponent, которая устанавливает для isAlive значение false.
ngOnDestroy(){ this.isAlive = false; }
Теперь, если src$ компонента ParentComponent больше не будет выдавать значения, вы получите утечку памяти прямо здесь! (Предикат takeWhile никогда не будет оцениваться).
**если вы, конечно, не используете async-pipe, который будет обрабатывать подписку за вас. Но в случае с async-pipe это также означает, что оператор takeWhile(() =›this.isAlive) не имеет смысла, поскольку канал порвется. вниз по течению.