2017-02-15 2 views
4

Ich habe eine einfache Route mit 1 Parameter:Winkel 2 route param in Daten

{ 
    path: 'item/:id', 
    component: ItemComponent, 
    data: {title: 'Item detail'} 
} 

Ich gründe Seitentitel in Haupt AppComponent Datentitel Eigenschaft mit:

export class AppComponent implements OnInit { 
    title: string; 

    ngOnInit() { 
     this.router.events 
     .. parse it 
     .subscribe((event) => { 
       this.title = event['title']; 
     }); 
    } 
} 

Dann bin ich Anzeigen es nur in AppComponent Vorlage:

<h1>{{ title }}</h1> 

Das Problem ist, wenn ich dynamische Titel wiehaben wollen. Gibt es eine Möglichkeit, wie z. route param (: id) oder Variable in Datentiteleigenschaft? So etwas wie

{ 
    path: 'item/:id', 
    component: ItemComponent, 
    data: {title: 'Item detail #' + :id } 
} 
+0

Ich denke nicht. Aber Sie können den Parameter "data.title" als "Blueprint" beibehalten und innerhalb der Komponente suchen/ersetzen. – AngularChef

+0

Ist es möglich, es in ItemComponent zu ersetzen? – dontHaveName

+0

Yup. Ich habe eine Antwort mit Code geschrieben. Gibt es einen bestimmten Grund, warum Sie router.events verwenden, um die Routendaten/Parameter zu extrahieren? (statt nur 'route.data' und' route.params') – AngularChef

Antwort

2

Wie ich in den Kommentaren gesagt, könnten Sie den data.title param als Vorlage halten und den dynamischen Teil aus der Komponente ersetzen.

Routen Erklärung:

{ 
    path: 'item/:id', 
    component: ItemComponent, 
    data: { title: 'Item detail [id]' } 
} 

In data.title schrieb ich [id] Ersatz einfacher zu machen, aber zu verwenden, fühlen Sie sich frei, was Symbole Sie möchten, dass die Zeichenfolge abgrenzen zu ersetzen.

Dann wird in der Komponente:

export class AppComponent { 
    title: string; 

    constructor(private route: ActivatedRoute) {} 

    ngOnInit() { 
    const titlePattern = this.route.snapshot.data['title']; 
    const id = this.route.snapshot.params['id']; 
    this.title = titlePattern.replace('[id]', id); 
    } 
} 
+0

Ja, aber es würde keinen Sinn machen, es in AppComponent zu ersetzen, da es xx-Routen mit demselben Muster geben könnte. Wäre besser, wenn ich es innerhalb jeder FeatureComponent ändere, also habe ich beschlossen, einen Dienst dafür zu erstellen. – dontHaveName