End interval when route changes in Angular 2

后端 未结 3 479
青春惊慌失措
青春惊慌失措 2021-01-05 07:22

I start a timer in an Angular 2 component which is inside a router outlet.

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

When I leave the route

相关标签:
3条回答
  • 2021-01-05 07:45

    This should do it:

    routerOnActivate() {
      this.timer = setInterval(()=>{
                    ...
                }, 10000);
    }
    
    routerOnDeactivate() {
      clearInterval(this.timer);
    }
    
    0 讨论(0)
  • 2021-01-05 07:57

    Maybe for what you want is better OnDeactivate from angular2/router (and maybe also OnActivate depending on your usecase) because you said you want to end the timer when the user leaves the route If I understand it correctly.

    export Compnent implements OnInit, OnDeactivate {
        private timer;
    
        ngOnInit(){
            this.timer = setInterval(_ => {
                // disco
            }, 10000);
        }
    
        routerOnDeactivate() {
            clearInterval(this.timer);
        }
    }
    
    0 讨论(0)
  • 2021-01-05 08:04

    You could clear the interval from this hook. Mine is controlled from the component/view.

    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);
         }
    }
    
    0 讨论(0)
提交回复
热议问题