Je reçois des notifications d'itinéraire d'une application back-end, pour charger des composants angulaires. Exemple:
// Current route "/example1/path1" let route = "/example1/path1"; //route received from back-end (SAME ROUTE PATH) this.router.navigate([route]); // NOK: route notification not received in subscription
De plus, dans chaque composant, je traite des notifications d'itinéraire dans un abonnement:
this.route.params.subscribe(params => { ... } });
Néanmoins, j'ai des difficultés à naviguez vers le même composant sur certaines routes reçues, disons:
// Current route "/example1/path1" let route = "/example2/path1"; //route received from back-end this.router.navigate([route]); // OK: navigates to component associated to "/example2/path1" path
Ma question est la suivante: existe-t-il un moyen de recevoir cette notification lors de l'abonnement lorsque l'application doit accéder au même route? Les paramètres de requête seraient une solution valable pour moi ex.: "/ Example1 / path1? Timestamp = 1234567", mais je ne sais pas comment pourrais-je analyser "timestamp" et "path1" séparément sans créer une méthode d'analyse séparée ...
J'apprécierais toute sorte d'aide ou de suggestion à ce sujet.
3 Réponses :
Voir https://angular.io/guide/router#getting-route- informations
import {ActivatedRoute} from "@angular/router"; constructor(private route: ActivatedRoute) {} ngOnInit() { // "/example1/path1?timestamp=1234567" this.route.params.subscribe(params => { this.timestamp = params['timestamp']; }); }
this.router.navigate(["/example1/path1"],{timestamp: 1234567});
il ne reçoit pas de notification après this.router.navigate (["/ example1 / path1? timestamp = 1234567"]);
essayez que this.router.navigate (["/ example1 / path1"], {timestamp: 1234567});
plus d'infos dans angular.io/guide/router#specifying-a-relative-route @AlbertoBricio
Désolé mais, après avoir exécuté this.router.navigate (["/ example1 / path1"], {timestamp: 1234567}) ;, avec des valeurs d'horodatage différentes lorsque l'utilisateur est dans le même chemin de route, l'abonnement this.route.queryParams n'est pas notifié
Vous pouvez utiliser
let route = "/example1/path1"; //route received from back-end (SAME ROUTE PATH) if (route==this.router.url) this.initialize("path1") else this.router.navigate([route]);
Mais en général, vous devriez éviter de "recharger toutes les applications". Voilà, utilisez une fonction auxiliaire et appelez en abonnement ou autre
this.route.params.subscribe(params => { this.initialize(params) }) initialize(param){ ..what ever.. }
Ensuite,
window.location.href = path
comment pourrais-je initialiser un composant depuis le début de initialize (route) {}? Existe-t-il un moyen de recharger un composant sans this.router.navigate?
que voulez-vous faire lorsque vous "rechargez un composant"? S'il ne s'agit que d'afficher de nouvelles données, vous n'avez besoin que d'actualiser les données en .ts. Vraiment, je ne pense pas que vous vouliez ngDestroy et ngCreate à nouveau le composant
Enfin, cette solution a été valable à cet effet:
this.route.fragment.subscribe(data => { })
Pour vous abonner aux paramètres de la chaîne de requête en utilisant ActivatedRoute
:
this.route.queryParams.subscribe(data => { })