O gancho de ciclo de vida OnDestroy está disponível em provedores. De acordo com a documentação:
Gancho de ciclo de vida que é chamado quando uma diretiva, canal ou serviço é destruído.
Aqui está um exemplo :
@Injectable()
class Service implements OnDestroy {
ngOnDestroy() {
console.log('Service destroy')
}
}
@Component({
selector: 'foo',
template: `foo`,
providers: [Service]
})
export class Foo implements OnDestroy {
constructor(service: Service) {}
ngOnDestroy() {
console.log('foo destroy')
}
}
@Component({
selector: 'my-app',
template: `<foo *ngIf="isFoo"></foo>`,
})
export class App {
isFoo = true;
constructor() {
setTimeout(() => {
this.isFoo = false;
}, 1000)
}
}
Observe que no código acima Service
está uma instância que pertence ao Foo
componente, portanto, ela pode ser destruída quando Foo
for destruída.
Para provedores que pertencem ao injetor de raiz, isso acontecerá na destruição do aplicativo; isso é útil para evitar vazamentos de memória com várias inicializações, ou seja, em testes.
Quando um provedor do injetor pai é inscrito no componente filho, ele não será destruído na destruição do componente, é responsabilidade do componente cancelar a inscrição no componente ngOnDestroy
(como outra resposta explica).
class Service implements OnDestroy
? E o que você pensa quando isso é chamado se o serviço for fornecido no nível de módulo