2016-09-14 2 views
4

Ich habe eine angular2 Anwendung (RC6-Version), wo einige wichtige globale Parameter aus einer Konfigurationsdatei geladen werden, einen Dienst verwenden, die diese Datei beim Start sammelt:deaktivieren Anwendung Laden/Routing in Angular2

@NgModule({ 
imports: [ BrowserModule, FormsModule, HttpModule, AppRoutes, SomeCustomModule ], 
declarations: [ AppComponent ] 
providers: [ 
      ConfigurationService, 
      { 
       provide: APP_INITIALIZER, 
       useFactory: (config: ConfigurationService) =>() => { 
          return config.load().then(configParams=> { return true;});  
          }, 
       deps: [ConfigurationService, HttpModule], 
       multi: true 
      } 
      ], 
bootstrap:[ AppComponent ] 
}) 
export class AppModule { } 

Wie gezeigt In diesem Snippet verwende ich, was ich eine ConfigurationRervice nennen, die durch einen HTTP-Aufruf eine Konfigurationsdatei liest und einige Parameter zurückgibt (als eine Verheißung). Wenn alles gut läuft, lädt die Anwendung perfekt und diese Config-Parameter sind in allen Sub-Modulen usw. zugänglich.

Die Frage ist, wie kann ich stoppen Anwendung laden der Untermodule für den Fall, dass diese Konfigurationsdatei nicht als lädt erwartet? (Bitte beachten Sie, dass die AppComponent im Wesentlichen nur ein Router-Outlet ist, der auf andere Routen umleitet, die von mehreren Submodulen definiert werden). Kann ich auf eine Fehlerseite deaktivieren oder umleiten, anstatt das von der angeforderten Route definierte Modul/Komponente zu laden?

+1

In AppComponent überprüfen Parameter. Wenn sie wie erwartet sind, lassen Sie die App andere Route zur Fehlerseite laufen ... – micronyks

+0

Ja, aber wo? Die AppComponent Vorlage ist nur ''. Ich versuchte, es mit einem * ngIf zu kapseln, aber ich erhalte einen Fehler "Fehler: Kann primären Ausgang nicht finden, um ChildComponent zu laden" Meinen Sie, eine ngOnInit() Funktion hinzuzufügen und den Scheck darin durchzuführen? – mpilliador

Antwort

7

Um anfängliche Routing der Seite zu deaktivieren, und lassen Sie es auf Ihrem ConfigurationService Sie je Griff haben initialNavigation zu false in Ihrem AppRoutes Objekt zu setzen:

export const AppRoutes = RouterModule.forRoot(ROUTES, {initialNavigation : false}); 

Innerhalb Ihres ConfigurationService Sie dann die router zu injizieren haben und Verwenden Sie dies, um abhängig von Ihrer Konfiguration zu navigieren.

Eine weitere Option ist die Verwendung des canActivate Routing-Hooks. Innerhalb dieses Hooks können Sie die ConfigurationService injizieren und bestimmen, ob diese Seite geladen werden kann oder nicht.

+0

Danke, ich war mir der Option {{initialNavigation: false}} nicht bewusst – mpilliador

+0

+1 Nur eine tolle Funktion von Angular Angular Team, Vielen Dank für die Mitteilung, Dokumentation/Referenz Link ..? –

+1

@PankajParkar Ich habe einen Link zur API hinzugefügt. Ich glaube nicht, dass es in der Dokumentation noch – PierreDuc

Verwandte Themen