Гак життєвого циклу OnDestroy доступний у постачальників. Відповідно до документів:
Гак життєвого циклу, який викликається при знищенні директиви, труби або служби.
Ось приклад :
@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)
}
}
Зверніть увагу, що у наведеному вище коді Serviceє екземпляр, який належить Fooкомпоненту, тому він може бути знищений при Fooзнищенні.
Для постачальників, які належать до кореневого інжектора, це відбуватиметься при знищенні програми, це корисно, щоб уникнути витоків пам’яті з кількома завантажувальними стріппами, тобто під час тестів.
Коли постачальник з батьківського інжектора підписаний на дочірній компонент, він не буде знищений при знищенні компонента, це відповідальність компонента - скасувати підписку на компонент ngOnDestroy(як пояснюється в іншій відповіді).
class Service implements OnDestroy? І що ви думаєте, коли це викликається, якщо послуга надається на рівні модуля