javascript - Avsluta intervallet när rutten ändras i Angular 2


Jag startar en timer i en Angular 2-komponent som ligger inne i en routerutgång.

setInterval(() => {
    ...
}, 10000);

När jag lämnar rutten där komponenten är inbäddad slutar inte timern. Hur kan jag åstadkomma det?

Svar #1

Du skulle kunna rensa intervallet från den här hooken. Min styrs från komponenten/vyn.

export classTestInterval implements OnInit, OnDestroy{
     public timerInterval:any;
     ngOnInit(){
       // Need interval scope in the component could be from somewhere else, but we need scope to be able to clear it on destruction of component.
       this.timerInterval = setInterval(function(){...},10000);
     }
     ngOnDestroy() {
        // Will clear when component is destroyed e.g. route is navigated away from.
        clearInterval(this.timerInterval);
     }
}

Svar #2

Detta borde göra det:

routerOnActivate() {
  this.timer = setInterval(()=>{
                ...
            }, 10000);
}

routerOnDeactivate() {
  clearInterval(this.timer);
}

Relaterade artiklar