In uno dei modelli dei miei percorsi di Angular 2 ( FirstComponent ) ho un pulsante
first.component.html
<div class="button" click="routeWithData()">Pass data and route</div>
Il mio obiettivo è raggiungere:
Fare clic sul pulsante -> instradare verso un altro componente preservando i dati e senza utilizzare l'altro componente come direttiva.
Questo è quello che ho provato ...
1o APPROCCIO
Nella stessa vista sto memorizzando la raccolta degli stessi dati in base all'interazione dell'utente.
first.component.ts
export class FirstComponent {
constructor(private _router: Router) { }
property1: number;
property2: string;
property3: TypeXY; // this a class, not a primitive type
// here some class methods set the properties above
// DOM events
routeWithData(){
// here route
}
}
Normalmente mi dirigo verso SecondComponent da
this._router.navigate(['SecondComponent']);
eventualmente passando i dati
this._router.navigate(['SecondComponent', {p1: this.property1, p2: property2 }]);
mentre la definizione del collegamento con i parametri sarebbe
@RouteConfig([
// ...
{ path: '/SecondComponent/:p1:p2', name: 'SecondComponent', component: SecondComponent}
)]
Il problema con questo approccio è che suppongo di non poter trasmettere dati complessi (ad esempio un oggetto come property3) nell'url;
2 ° APPROCCIO
Un'alternativa sarebbe includere SecondComponent come direttiva in FirstComponent.
<SecondComponent [p3]="property3"></SecondComponent>
Tuttavia, voglio indirizzare a quel componente, non includerlo!
3 ° APPROCCIO
La soluzione più valida che vedo qui sarebbe quella di utilizzare un servizio (ad esempio FirstComponentService)
- archivia i dati (_firstComponentService.storeData ()) su routeWithData () in FirstComponent
- recuperare i dati (_firstComponentService.retrieveData ()) in ngOnInit () in SecondComponent
Mentre questo approccio sembra perfettamente praticabile, mi chiedo se questo sia il modo più semplice / elegante per raggiungere l'obiettivo.
In generale, vorrei sapere se mi mancano altri potenziali approcci per passare i dati tra i componenti, in particolare con la minore quantità possibile di codice
state
controllare il PR per maggiori dettagli. Alcune informazioni utili qui