Dans l'un des modèles de mes routes Angular 2 ( FirstComponent ), j'ai un bouton
first.component.html
<div class="button" click="routeWithData()">Pass data and route</div>
Mon objectif est d'atteindre:
Cliquez sur le bouton -> route vers un autre composant tout en préservant les données et sans utiliser l'autre composant comme directive.
C'est ce que j'ai essayé ...
1ÈRE APPROCHE
Dans la même vue, je stocke la collecte des mêmes données en fonction de l'interaction de l'utilisateur.
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
}
}
Normalement, j'acheminais vers SecondComponent par
this._router.navigate(['SecondComponent']);
éventuellement passer les données par
this._router.navigate(['SecondComponent', {p1: this.property1, p2: property2 }]);
considérant que la définition du lien avec les paramètres serait
@RouteConfig([
// ...
{ path: '/SecondComponent/:p1:p2', name: 'SecondComponent', component: SecondComponent}
)]
Le problème avec cette approche est que je suppose que je ne peux pas transmettre de données complexes (par exemple un objet comme property3) dans l'url;
2ÈME APPROCHE
Une alternative serait d'inclure SecondComponent comme directive dans FirstComponent.
<SecondComponent [p3]="property3"></SecondComponent>
Cependant, je veux router vers ce composant, ne pas l'inclure!
3ÈME APPROCHE
La solution la plus viable que je vois ici serait d'utiliser un service (par exemple FirstComponentService) pour
- stocker les données (_firstComponentService.storeData ()) sur routeWithData () dans FirstComponent
- récupérer les données (_firstComponentService.retrieveData ()) dans ngOnInit () dans SecondComponent
Bien que cette approche semble parfaitement viable, je me demande si c'est la façon la plus simple / la plus élégante d'atteindre l'objectif.
En général, je voudrais savoir si je manque d'autres approches potentielles pour transmettre les données entre les composants, en particulier avec le moins de code possible
state
le PR pour plus de détails. Quelques informations utiles ici