2016-09-05 6 views
0

Ich habe eine Seite mit einem Header und einem Körper. Die Kopfzeile hat einen HILFE-Knopf, der die Dokumentation öffnen soll. Der Link zur Dokumentation wird durch eine Hilfe-ID parametriert, die davon abhängt, welche Seite gerade angezeigt wird.eckig 2 - Informationen von der aktiven Komponente

Ich muss aktualisiert werden help-id in Header je nachdem, welche Komponente derzeit von einem Router angezeigt wird. Mit anderen Worten, was ist der richtige Weg, um diesen Parameter (der eine einfache Zeichenkette ist) von der aktuell aktiven Komponente zu erhalten?

Ich habe gesehen, dass die Kommunikation mit einem Service gemacht wird, aber es scheint, ein Service für solch eine einfache Aufgabe ist ein bisschen ein Overkill.

Ich habe versucht, etwas von Router und ActivatedRoute Code abzuleiten, aber ich konnte nichts arbeiten. Die Navigationsereignisse enthalten keinen Verweis auf die Komponente. routerState.root.firstChild ist null, wenn die App geladen wird.

EDIT:

hier, in der AppComponent Ich brauche die aktuelle Hilfe-ID

export class AppComponent { 
    private helpId; 
} 

Meine Komponenten, die in Router-Ausgang angezeigt werden, diese Eigenschaft haben, z.B.

export class HeroComponent { 
    const helpId = 'hero'; 
} 

export class HeroDetailsComponent { 
    const helpId = 'hero-details'; 
} 

Es gibt Routen für jede Komponente definiert, zum Beispiel

const heroesRoutes: Routes = [ 
    { path: 'heroes', component: HeroComponent }, 
    { path: 'hero/:id', component: HeroDetailsComponent } 
]; 

Ich brauche die Hilfe-ID der aktuell angezeigten Komponente (vom Router gemacht), um die Hilfe-Link zu halten Kopfzeile aktuell Die Help-ID wird in Route Params nicht übergeben.

+1

Willkommen bei Stackoverflow. Fügen Sie Ihrer Frage den Code hinzu, der zeigt, was Sie zu erreichen versuchen, das Problem reproduzieren und diagnostizieren zu können. –

+0

Was passiert, wenn mehr als eine Komponente angezeigt wird? Die Frage braucht mehr Kontext. Wie und wann werden die Komponenten angezeigt/ausgeblendet/entfernt/...? –

+0

Von dem, was ich sehen kann, gibt es nur eine Komponente für jede Route, die in der Standard-Router Outlet gerendert wird, ich brauche den Wert von diesem –

Antwort

0

Es kann mit der ActivatedRoute tatsächlich getan werden.

Sie müssen es in Ihrer Komponente injizieren:

contructor(private route: ActivatedRoute) {} 

Und dann müssen Sie zu routen Änderungsereignis hören, so etwas wie:

ngOnInit() { 
    this.route.params.subscribe(params => { 
     // route info is stored in `params` 
     console.log(params); 
    }); 
} 
+0

der Parameter, den ich brauche, ist nicht in URL übergeben, es ist in jeder Komponente hardcoded, siehe bearbeiten –

+0

Dann sollte es über einen Service getan werden, ist es egal, dass ist ein sehr kleiner Service.Jede Kommunikation wird von Diensten in Angular2 durchgeführt, nur zwischen Geschwisterkomponenten kann über '@Input' - '@Output' getan werden. – tibbus

+0

vielen Dank, wenn Sie es in eine Antwort verwandeln, werde ich es akzeptieren –

Verwandte Themen