2016-04-22 9 views
9

Zastanawiam się, czy mogę zapisać się do strumienia w moim konstruktora tak:Czy muszę zrezygnować z subskrypcji za każdym razem, gdy testowany jest składnik?

_eventEmitterService.event.subscribe((msg)=>{}) 

Więc kiedy zmienić widok na inny składnik, i wrócić, zdarzenia są wyzwalane dwukrotnie z tego strumienia. Czy muszę zrezygnować z subskrypcji za każdym razem, gdy zmienię komponent, używając ngOnDestroy?

Dzięki

+1

Tak jak ty. Dałbym ci link, w którym stwierdza, że ​​w dokumentacji, ale nie mogę go już znaleźć – PierreDuc

Odpowiedz

12

Znalazłem! I tak, za dokumentacji podano w angular2 lifecycle-hook przewodniku:

ngOnDestroy
Cleanup tuż przed kątowej niszczy dyrektywy/komponent. Anuluj subskrypcje i usuwaj programy obsługi zdarzeń, aby uniknąć wycieków pamięci.

Więc tak, trzeba zrezygnować z obserwabli na ngOnDestroy()

5

tylko dodatkową wskazówkę wielkiego odpowiedzią Pierre'a. Rura async automatycznie anuluje subskrypcję obserwowanych obiektów, na które została nałożona. Musisz więc anulować subskrypcję dla obserwowalnych, którymi zarządzasz samodzielnie.

Zobacz tę linię w kodzie źródłowym:

+0

Link Github jest już martwy. Czy mógłbyś rozwinąć nieco więcej, twoja odpowiedź wydaje się nieco przeczyć Pierre'owi, więc nie jestem pewien, czy muszę ręcznie czyścić? Angular oficjalny tutorial nie robi żadnych porządków, o ile widzę. – Davor

Powiązane problemy