Pengait siklus hidup OnDestroy tersedia di penyedia. Menurut dokumen:
Pengait siklus hidup yang dipanggil saat perintah, pipa, atau layanan dimusnahkan.
Berikut contohnya :
@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)
}
}
Perhatikan bahwa kode di atas Service
adalah sebuah instance milik Foo
komponen, sehingga dapat dimusnahkan jika Foo
dimusnahkan.
Untuk penyedia yang termasuk dalam root injector, hal ini akan terjadi pada penghancuran aplikasi, hal ini berguna untuk menghindari kebocoran memori dengan beberapa bootstrap, misalnya dalam pengujian.
Ketika penyedia dari injektor induk berlangganan komponen anak, itu tidak akan dimusnahkan saat komponen dihancurkan, ini adalah tanggung jawab komponen untuk berhenti berlangganan dalam komponen ngOnDestroy
(seperti jawaban lain menjelaskan).
class Service implements OnDestroy
? Dan apa yang Anda pikirkan saat ini dipanggil jika layanan disediakan pada tingkat modul