2016-04-30 7 views
6

Używam interwału obserwowalnego do wykonania określonej funkcji co piąty sekund w obrębie określonego komponentu, w odniesieniu do ścieżki w mojej konfiguracji trasy.angular2 - Najlepszy sposób na zakończenie obserwowalnego interwału, gdy zmienia się ścieżka

Observable.interval(5000).subscribe(res => { 
    // Something happens here 
}); 

Jednak chcę zakończyć interwał, gdy zmienia się ścieżka. Teraz po prostu kontynuuje wykonywanie zadania ...

Jaki jest najlepszy sposób na zrobienie tego?

Odpowiedz

4

Można zrezygnować z subskrypcji (obiekt powrót metody subskrybowania) w takim przypadku:

var subscription = Observable.interval(5000).subscribe(res => { 
    // Something happens here 
}); 

// to be called when the route changes 
subscription.unsubscribe(); 

Ponieważ obserwowalny jest zimno i nie będzie nie więcej subskrypcji, dostrzegalne będą usuwane ...

Możesz użyć metody hook "routerOnDesactivate" w swoim komponencie, aby zrezygnować z subskrypcji. To jest haczyk, który informuje, kiedy opuszczasz komponent trasy w kontekście routingu.

Zobacz ten link aby uzyskać więcej informacji:

+0

To wydaje się być sprawiedliwe, ale skąd mam wiedzieć, kiedy trasa zmieni się z komponentu? –

+0

Możesz użyć metody hookOnDesactivate w swoim komponencie, aby zrezygnować z subskrypcji. Zaktualizowałem swoją odpowiedź. –

0

Świetny sposób na rozwiązanie tego problemu jest stworzenie obserwowalny w zmiennej i użyć „| async "potok do subskrybowania i pokaż wartość w szablonie. W ten sposób fajką zajmuje się wyrejestrowywanie.

Powiązane problemy