2016-01-25 9 views
5

Mam do czynienia z problemami, gdy próbuję użyć RouteData w Angular2 Beta przy użyciu TypeScript.Jak korzystać z RouteData w Angular2 Beta?

I wstrzyknąć go w konstruktorze i zaimportować go poprawnie

import {RouteConfig, Router, RouteData} from 'angular2/router'; 

export class App { 
    constructor(public router: Router, public data: RouteData) { 
     // router works - routedata not 
    } 
} 

Dostaję No provider for RouteData! (App -> RouteData).

Gdybym włączenie go do adnotacji komponentów jak ten

@Component({ 
    //.. 
    providers: [RouteData] 
}) 

otrzymuję ten błąd: Cannot resolve all parameters for RouteData(?). Make sure they all have valid type or annotations.

+0

Nie należy wstrzykiwać 'RouteData' przez samych dostawców. Angular2 robi to wszystko dla ciebie. –

+0

Masz na myśli importowanie 'ROUTER_PROVIDERS'? Jak mogę wtedy skompilować maszynę do pisania? – gerric

+0

['ROUTER_PROVIDERS'] (https://github.com/angular/angular/blob/master/modules/angular2/router.ts#L84) nie dostarcza' RouteData' ani 'RouteParams', dlatego nie są dostępne w komponencie root. Są one dostarczane przez ['RouterOulet'] (https://github.com/angular/angular/blob/master/modules/angular2/src/router/router_outlet.ts#L60), więc będą dostępne w każdym załadowanym komponencie poprzez routing. –

Odpowiedz

5

RouteData dostarcza danych do komponentu dziecka przez RouteConfig w komponentu macierzystego. Nie powinno być potrzeby użycia go w AppComponent.

Aby z niego skorzystać należy zapewnić RouteConfig w AppComponent tak:

@RouteConfig([ 
    {path: '/child', name: 'Child', component: ChildCmp, data: {item: 'hi there'}} 
]) 

Twój ChildComponent należy następnie wstrzyknąć RouteData i jest w stanie odzyskać parametrów w trasie tak:

export class ChildCmp { 
    constructor(@Inject(RouteData) private data:RouteData) { 
    this.data.get("item") 
    } 
}