import { Component, input } from '@angular/core';
import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
@Component({ ... })
class MyComponent {
value = input<string>();
constructor() {
toObservable(this.value)
.pipe(takeUntilDestroyed()) // is this superfluous?
.subscribe(console.log);
}
}
A documentação afirma que toObservable deve ser chamado em um contexto de injeção, portanto, não tenho certeza se ele está limpando assinaturas automaticamente ou não.
toObservable
a implementação usará aDestroyRef
para invocarcomplete
o observável que ela cria. Então, de certa forma, sim, não é necessário ter umtakeUntilDestroyed()
setoObservable
for invocado em um componente.Porém, se
toObservable
for invocado em um serviço fornecido na raiz,DestroyRef
nunca será acionadoonDestroy
e seu observável (quase) nunca será destruído.Este exemplo é uma ótima ilustração de um observável que não seria concluído automaticamente.