2017-02-15 5 views
2

Ich habe Routen wie so strukturiert:Pass Route param von Eltern auf das Kind Routen

parent/:id 
    | 
    child 
    | 
    child 

Kann ich nur die param von der übergeordneten Komponente über erhalten:

ngOnInit() { 
    this.route.params.subscribe((params) => { 
     this.id = +params['id']; 
    }); 
} 

und dann fügen Sie es genauso ein Eingang auf der <router-output> irgendwie? Oder muss ich den Wert von jedem Kind auf die gleiche Art und Weise ziehen, wie ich das Elternteil gemacht habe?

Was ist die beste Möglichkeit, den id Parameter von der übergeordneten Komponente an alle untergeordneten Komponenten zu übergeben?

+1

Wenn ich Ihre Frage richtig verstehe, ist der Punkt, wie Parameter in einem Komponentenbaum tief passieren. In diesem Fall einen Blick auf https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service – Picci

+0

Das ist im Wesentlichen die Frage, ja. Wie würde ein Service für dieses Beispiel aussehen? Wie würde ich den Param vom Service erhalten, um in die Kinder spritzen zu können? –

Antwort

1

Leider gibt es keine einfache Möglichkeit, auf Parent-Route-Parameter zuzugreifen, und es gibt keine Pläne, sie zu ändern #12767, so ist die einzige Möglichkeit eine Problemumgehung mit Service oder localStorage, was auch immer Sie möchten.

class Service { 
     public params:Subject<any> = new Subject<any>(); 

     public next(params):void { this.params.next(params); } 
    } 

    class Parent { 
     constructor(service:Service, route:ActivatedRoute){ 
      activatedRoute.params.subscribe(params => service.next(params)); 
     } 
    } 

    class Child { 
     constructor(service:Service){ 
      service.params.subscribe(params => console.log(params)); 
     } 
    } 

Hier einige Möglichkeiten, die Komponenten miteinander kommunizieren können: https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#bidirectional-service

+0

Wie würde ein Service in diesem Fall aussehen? Was wäre der beste Weg, um den ID-Param in den Dienst zu bekommen, um in die Kindkomponenten injizieren zu können? –

+0

Hinzugefügt vereinfachtes Beispiel. – kemsky

+0

Ihre Verwendung von 'next' und 'params' war verwirrend, aber das scheint im Allgemeinen so zu sein, zumindest jetzt. Es scheint immer noch ein offenes Ticket zu diesem Thema zu geben https://github.com/angular/angular/issues/13058. Würde es Ihnen etwas ausmachen, das Snippet ein wenig auszuarbeiten, damit ich es akzeptieren kann? –

Verwandte Themen