2017-02-22 6 views
5

Angular2 Material Toolbar kullanıyorum ve geçerli sayfa başlığını ona aktarmak istiyorum.Açısal 2: Başka bir bileşenden ActivatedRoute anlık görüntü verilerine erişme

const APP_ROUTES: Routes = [ 
    { 
    path: '', 
    component: HomeComponent, 
    data: { 
     title: 'Home' 
    } 
    }, { 
    path: 'settings', 
    component: SettingsComponent, 
    data: { 
     title: 'Settings' 
    } 
    } 
]; 
: Ben özel title özelliğe sahip bir yönlendirme nesne var benim app.routing yılında

@Component({ 
    selector: 'mi-root', 
    template: ` 
    <mi-header></mi-header> 
    <router-outlet></router-outlet> 
    ` 
}) 

export class AppComponent { 
    constructor() {} 
} 

:

Benim app.component bir başlık bileşeni ve mevcut sayfa bileşenine sahip

Şimdi header.component adresinden data.title özelliğine erişmek istiyorum ancak maalesef undefined. Ben aynı şekilde aynı özelliğe erişmeye çalışıyorum ama HomeComponent veya SettingsComponent dan gayet çalışırsa

import { Component, OnInit } from '@angular/core'; 
import { ActivatedRoute} from '@angular/router'; 

@Component({ 
    selector: 'mi-header', 
    template: ` 
    <md-toolbar color="primary"> 
     <span class="u-ml">{{title}}</span> 
    </md-toolbar> 
    `, 
    styles: [] 
}) 

export class HeaderComponent implements OnInit { 
    title: string; 

    constructor(private route: ActivatedRoute) { 
    this.title = this.route.snapshot.data['title']; 
    } 
} 

: My data nesnesi boş Yani

import { Component } from '@angular/core'; 
import { ActivatedRoute } from '@angular/router'; 

@Component({ 
    selector: 'mi-settings', 
    template: ` 
    <h1>Welcome to {{title}} screen</h1> 
    `, 
    styles: [] 
}) 

export class SettingsComponent { 
    title: string; 

    constructor(private route: ActivatedRoute) { 
    this.title = route.snapshot.data['title']; 
    } 
} 

, nasıl route.snapshot.data['title'] erişebilirsiniz HeaderComponent'dan mı? header.component` bir * değil `çünkü var

+0

* bileşeni yönlendirilir. Bununla ilişkili bir yol yok, dolayısıyla "veri" yok. * Yönlendirici etkinliklerine * baktınız mı ((bu blog yazısında açıklandığı gibi) (https://toddmotto.com/dynamic-page-titles-angular-2-router-events)? – AngularChef

cevap

4
constructor(router:Router, route:ActivatedRoute) { 
    router.events 
    .filter(e => e instanceof NavigationEnd) 
    .forEach(e => { 
     console.log('title', route.root.firstChild.snapshot.data.title); 
    } 
    } 

Plunker example

+0

'Router.firstChild' için bana yanlış bir şey yapıyorum biliyorum bana bir örnek verebilir misiniz, lütfen :) –

+0

O zaman muhtemelen çocuk yolları olmayan bir yaprak segmenti. 'Router.root.firstChild' –

+0

'u deneyin Ne yazık ki tekrar' null ' –