Метод жизненного цикла ngDestroy не запускается для динамически создаваемого компонента. Я создаю несколько компонентов динамически, используя ComponentFactoryResolver .
В моем динамически созданном компоненте я извлекаю некоторые данные из API и периодически извлекаю данные каждые 5 минут, используя метод setInterval . и я очищаю экземпляр Interval внутри метода ngDestroy, при перенаправлении на другую страницу компонент ngDestroy не запускается, а API запускает даже компонент, которого нет в представлении.
Вот как я динамическое создание компонентов.
const factory = this.resolver.resolveComponentFactory(DynamicComponent); // Component Construction
const ref = factory.create(this.injector);
Вот мой DynamicComponent, который имеет функциональные возможности
import { Component, OnInit, OnDestroy } from "@angular/core";
@Component({
selector: "app-dynamic,
templateUrl: "./dynamic.component.html",
styleUrls: ["./dynamic.component.scss"]
})
export class DynamicComponent implements OnInit, OnDestroy {
loopCount: number;
autoRefreshInterval: any;
constructor() {}
ngOnInit() {
this.fetchData();
this.startAutoRefreshLoop();
}
ngOnDestroy(): void {
console.log("Destroying loop"); // ngOnDestroy is not triggering
this.clearAutoRefreshLoop();
}
clearAutoRefreshLoop() {
clearInterval(this.autoRefreshInterval);
}
/*
function for starting the Automatically recall the service for certain period of time
*/
startAutoRefreshLoop() {
console.log("starting loop");
this.loopCount = 10 * 1000;
this.autoRefreshInterval = setInterval(() => {
this.fetchData();
}, this.loopCount);
}
fetchData() {
// FETCHING DATA FROM API CODE ....
}
}