2017-09-22 51 views
7

Chcę wydrukować wizualną mapę witryny z mojej aplikacji i użyć do tego routera. Znam obecne trasy można uzyskać za pośrednictwem router.config jakDrukowanie drzewa trasy w kanciastym 2

this.router.config.forEach(route => { 

ale nie mogę znaleźć rozwiązania, aby załadować swoje leniwe załadowane dzieci. Kiedy używam dodatku do przeglądarki Augury, widzę całą mapę w mgnieniu oka. Jakieś sugestie?

+0

Myślę, że nie można wczytać tras modułów ładowanych przez leniwy ... –

+0

To było to, co myślałem, zanim zobaczyłem to drzewo trasy wydrukowane w Augurii :-) – Gatekeeper

+0

Myślę, że 'Augury' jakoś ładuje tys. Modułów ładowania: - | –

Odpowiedz

1

Augury również nie pokazuje tras, dopóki nie załadujesz leniwych załadowanych modułów, możesz sprawdzić przechodząc do route example app i widząc Drzewo Routera, nie znajdziesz dróg administracyjnych.

enter image description here

Mimo, że, Jeśli chcesz sprawdzić config po leniwy załadowany moduł został załadowany, można użyć poniżej

this.router.events.filter(e => e instanceof RouteConfigLoadEnd).subscribe(e => { 
    console.log(this.router.config); 
}); 

RouteConfigLoadEnd Reprezentuje zdarzenie wyzwalane, gdy trasa została załadowana leniwo.

znajdziesz nieruchomość o nazwie _loadedConfig w swojej leniwej trasie modułu po zaktualizowaniu konfiguracji, która będzie miała konfigurację.

enter image description here

Sprawdź to Plunker !!, zajrzeć do app.component.ts, dodałem powyżej kodu w konstruktorze AppComponent.

Spośród curosity, szukałem w kodzie zapowiedzią, w jaki sposób zaktualizować Router Tree, znalazłem poniżej

W backend.ts znajduje się kod do subskrypcji na ngZone.onStable który

powiadamia, gdy ostatni onMicrotaskEmpty skończył i nie ma więcej microtasks

W abonamencie jest sprawdzane, czy trasy została zmieniona lub nie, jeśli zmieniono następnie trasy są analizowane i drzewa Router jest aktualizowana,

fragment jest jak poniżej z parse-modules.ts,

export const parseModulesFromRouter = (router, existingModules: NgModulesRegistry) => { 
    const foundModules = []; 

    const _parse = (config) => { 
    config.forEach(route => { 
     if (route._loadedConfig) { 
     foundModules.push(route._loadedConfig.module ? 
      route._loadedConfig.module.instance : 
      route._loadedConfig.injector.instance); 
     _parse(route._loadedConfig.routes || []); 
     } 
     _parse(route.children || []); 
    }); 
    }; 
...... 
...... 

nadzieję, że pomoże !!