El enlace del ciclo de vida de OnDestroy está disponible en los proveedores. Según los documentos:
Enlace de ciclo de vida que se llama cuando se destruye una directiva, canalización o servicio.
He aquí un ejemplo :
@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)
}
}
Tenga en cuenta que en el código anterior Service
hay una instancia que pertenece al Foo
componente, por lo que puede destruirse cuando Foo
se destruye.
Para los proveedores que pertenecen a root injector, esto sucederá al destruir la aplicación, esto es útil para evitar pérdidas de memoria con múltiples bootstraps, es decir, en pruebas.
Cuando un proveedor del inyector principal está suscrito en el componente secundario, no se destruirá al destruir el componente, es responsabilidad del componente cancelar la suscripción en el componente ngOnDestroy
(como explica otra respuesta).
class Service implements OnDestroy
? ¿Y qué piensas cuando se llama a esto si el servicio se proporciona a nivel de módulo