Гак життєвого циклу 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
? І що ви думаєте, коли це викликається, якщо послуга надається на рівні модуля