2016-06-22 9 views

Odpowiedz

29

Router dostarcza events obserwowalne, które mogą być subskrybowane

constructor(router:Router) { 
    router.events.subscribe(event => { 
    if(event instanceof NavigationStart) { 
    } 
    // NavigationEnd 
    // NavigationCancel 
    // NavigationError 
    // RoutesRecognized 
    } 
}); 

Zobacz także

UWAGA

nie zapomnij importować NavigationStart z modułem router

import { Router, NavigationStart } from '@angular/router'; 

bo jeśli nie to nie będzie importować instanceof praca i błąd wzrośnie.

+0

widzę ten błąd z RC4, 'Unhandled Promesa odrzucenie (SystemJS) Błąd: Nie można rozwiązać wszystkie parametry 'Router' (?,,,,,???? ,?). Upewnij się, że wszystkie parametry są ozdobione Injectem lub posiadają adnotacje typu, a "Router" jest ozdobiony Injectable'. Zrobiłem to z ROUER_PROVIDERS z RC2, ale nie wiem jak z RC4, ponieważ nie mogłem go znaleźć z RC4. jakąś podpowiedź lub plunker? – allenhwkim

+0

To nie wydaje się być związane z tym pytaniem lub moją odpowiedzią. Zobacz http://stackoverflow.com/a/38555016/217408 –

+1

Podczas korzystania z tego, możesz również zaimportować "Event" z @ kątowego/routera. W przeciwnym razie TypeScript użyje zwykłego window.Event, do którego NavigationStart się nie rozwiąże. – oooyaya

3

Podobnie jak to

constructor(
    private router:Router 
){} 
this.router.events 
    .filter(event=> event instanceof NavigationStart) 
    .subscribe((event:NavigationStart)=>{ 
    // TODO 
    }); 
+0

"Filtr" właściwości "nie istnieje w typie" Observable "." – osynligsebastian

+2

Musisz zaimportować operator filtru, w przeciwnym razie dostaniesz ten błąd. 'import 'rxjs/add/operator/filter'' – frosty