Używanie Angular 2 rc.1 i TypeScript. Mam dużo problemów z przekazywaniem parametrów routingu do mojego komponentu, gdy komponent jest załadowany do podprogramu. Używam pakietu @angular/router-deprecated
.Angular 2: Jak przekazać parametry trasy do podprogramu?
W moim głównego składnika, mam skonfigurowane trasy jako takie:
@RouteConfig([
{path:'/top', name:'Top', component: EndPointComponent},
{path:'/sub/...', name:'Sub', component: MiddleManComponent}
])
Oto komponent końcowym gdzie próbuję odczytać parametry
import {Component} from '@angular/core';
import {RouteParams} from '@angular/router-deprecated';
@Component({
template: 'Route Params: {{routeParams.params | json}}'
})
export class EndPointComponent{
constructor(private routeParams:RouteParams){}
}
Oto komponent middleman z podprogramem do EndPointComponent
import {Component} from '@angular/core';
import {RouteConfig, ROUTER_DIRECTIVES} from '@angular/router-deprecated';
import {EndPointComponent} from "./endpoint.component";
@Component({
directives: [ROUTER_DIRECTIVES]
template: `<router-outlet></router-outlet>`
})
@RouteConfig([
{path: '/end', name: 'End', component: EndPointComponent, useAsDefault: true}
])
export class MiddleManComponent {}
Parametry mogą być z powodzeniem czytać z routeParams
przedmiotu EndPointComponent
gdy składnik jest ładowany z trasy najwyższego poziomu (np: trasa o nazwie „top” w składniku głównym). Jednak parametry są zawsze puste, gdy przechodzę do EndPointComponent
przechodząc przez MiddleManComponent
(np .: przez trasę o nazwie "Sub" w komponencie root).
Czy routery dziecięce wyszukują parametry przed rodzicami, zanim rozwiązują trasy? To nie ma większego sensu, więc założę się, że czegoś brakuje. Moje pytanie brzmi po prostu: jak przekazać parametry trasy do podprogramu?
PS: Próbowałem zbudować plunarem na demo this setup, ale poddałem się, gdy nie mogłem ustalić, dlaczego aplikacja się nie wczytuje.
Dziękuję. To naprawdę ciekawe rozwiązanie. Wydaje się nieco hacky, prawda? O ile wiesz, Angular 2 nie ma wbudowanego rozwiązania tego? Myślę, że mój przypadek użycia jest naprawdę powszechny, chyba że moja architektura komponentów jest źle pomyślana. PS: wbudowane rozwiązanie, jeśli istnieje, może być w '@ kątowym/routerze', a nie w starszym' @ kątowym/routerze-przestarzałym " – BeetleJuice
Zaczyna czuć się hackerem, gdy próbujesz mieć ten sam komponent utworzony na innej trasie poziomy. Jeśli potrzebujesz parametrów trasy najwyższego poziomu, potrzebujesz komponentu przeznaczonego tylko do utworzenia usługi i przesunięcia pozostałych komponentów o jeden poziom. To jeden z powodów, dla których uważam, że to błąd projektu, że komponenty na najwyższym poziomie nie mają dostępu do RouteParams. Mimo to korzystanie z usług do udostępniania danych między komponentami jest powszechnym wzorcem dla aplikacji Angular. – awiseman
Czuję się brudny robiąc to, ale działa. – BeetleJuice