Utilizzo di Angular 2 rc.1 e TypeScript. Sto avendo un sacco di problemi nel passare i parametri di instradamento al mio componente quando il componente viene caricato in una sub-tratta. Io uso il pacchetto @angular/router-deprecated
.Angular 2: come passare i parametri del percorso a subroute?
Nel mio componente radice, ho configurato i percorsi in quanto tali:
@RouteConfig([
{path:'/top', name:'Top', component: EndPointComponent},
{path:'/sub/...', name:'Sub', component: MiddleManComponent}
])
Ecco la componente endpoint dove ho tentativo di leggere i parametri
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){}
}
Ecco la middleman component con il subroute a 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 {}
I parametri possono essere letti con successo dall'oggetto routeParams
di EndPointComponent
quando il componente viene caricato dalla route di livello superiore (ad esempio: la route denominata "Top" nel componente root). Tuttavia, i parametri sono sempre vuoti quando si naviga su EndPointComponent
passando da MiddleManComponent
(ad esempio: tramite la route denominata "Sub" nel componente root).
I router per bambini puliscono i parametri dai genitori prima di risolvere i percorsi? Non ha molto senso quindi scommetto che mi manca qualcosa. La mia domanda è semplicemente: come posso passare i parametri del percorso a una sub-tratta?
PS: ho provato a costruire un plunker su demo this setup ma mi sono arreso quando non riuscivo a capire perché l'applicazione non viene caricata.
Grazie. Questa è una soluzione davvero interessante. Sembra un po 'hacky, vero? Per quanto ne sai, Angular 2 non ha una soluzione integrata per questo? Penserei che il mio caso d'uso è molto comune a meno che l'architettura dei miei componenti non sia concepita male. PS: la soluzione integrata se ne esiste una potrebbe essere in '@ angular/router' piuttosto che la più vecchia' @ angular/router-deprecated' – BeetleJuice
Inizia a sembrare hacky quando si tenta di avere lo stesso componente istanziato su una rotta diversa livelli. Se hai bisogno dei parametri del percorso di livello superiore, in pratica hai bisogno di un componente dedicato solo all'istanziazione del tuo servizio e spingendo gli altri componenti verso il basso di un livello. Questo è uno dei motivi per cui penso che sia un errore di progettazione che i componenti di livello superiore non abbiano accesso a RouteParams. Detto questo, però, l'utilizzo di servizi per condividere dati tra componenti è un modello di progettazione comune per le applicazioni Angular. – awiseman
Mi sento sporco, ma funziona. – BeetleJuice