Dans l'un des modèles de mes routes Angular 2 ( FirstComponent ) J'ai un bouton
premier.composant.html
<div class="button" click="routeWithData()">Pass data and route</div>
Mon objectif est à réaliser :
Clic sur un bouton -> acheminement 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 les mêmes données basées sur l'interaction de l'utilisateur.
premier.composant.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, je me dirigerais vers SecondComposant par
this._router.navigate(['SecondComponent']);
en transmettant éventuellement les données par
this._router.navigate(['SecondComponent', {p1: this.property1, p2: property2 }]);
alors 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 pense Je ne peux pas transmettre des données complexes (par exemple, un objet comme la propriété3) in-url ;
2IÈME APPROCHE
Une alternative serait d'inclure SecondComponent en tant que directive dans FirstComponent.
<SecondComponent [p3]="property3"></SecondComponent>
Cependant, je veux itinéraire à ce composant, et non l'inclure !
3IÈME APPROCHE
La solution la plus viable que je vois ici serait d'utiliser une Service (par exemple, FirstComponentService) à l'adresse suivante
- magasin les données (_firstComponentService.storeData()) sur routeWithData() dans FirstComponent
- récupérer les données (_firstComponentService.retrieveData()) en ngOnInit() sur SecondComposant
Bien que cette approche semble parfaitement viable, je me demande si c'est le moyen le plus simple / le plus élégant d'atteindre l'objectif.
D'une manière générale, j'aimerais savoir si je manque d'autres approches potentielles pour transmettre les données entre les composants, notamment avec le moins de code possible
4 votes
Merci @Prashobh.
Pass data using Query Parameters
c'est ce que je cherchais. votre enlace a sauvé ma journée.0 votes
Angular 7.2 dispose désormais d'une nouvelle fonctionnalité permettant de transmettre des données entre les routes à l'aide de la fonction
state
vérifier le PR pour plus de détails. Quelques informations utiles aquí0 votes
@Prashobh Merci beaucoup. Le lien que vous avez partagé est très utile
0 votes
Exemple de travail : stackoverflow.com/a/69420764/7186739
2 votes
Le routage est une fonctionnalité complexe d'Angular qui vaut vraiment la peine d'être apprise ! Vous trouverez ici des détails intéressants sur le passage de données via le routage : indepth.dev/tutorials/angular/ Ce guide présente diverses techniques d'utilisation des données statiques dans la définition du routage et des données dynamiques (état) pendant une navigation spécifique.