Je veux naviguer entre deux routes dans Angular 7 avec publication de données entre elles. Mais je ne veux pas montrer ces paramètres dans l'URL. Comment le faire de manière appropriée?
en ce moment, je me bats avec quelque chose comme ça:
this.router.navigate(['/my-new-route', {data1: 'test', test2: 2323, test: 'AAAAAAA'}]);
et ça change mon URL pour
http://localhost:4200/my-new-route;data1=test;test2=2323;test=AAAAAAA
comment faire pour annuler ces données de l'url:
http://localhost:4200/my-new-route
Éditer:
Mon cas:
on/form route - les utilisateurs ont un formulaire avec des champs vides à remplir manuellement
mais sur la page/options, il y a une configuration prédéfinie, lorsque l'utilisateur en choisit une, on navigue vers/formulaire et les champs sont remplis automatiquement
quand ils reviennent à une autre page et reviennent à/form - devrait voir un formulaire vide. Seul le lien depuis/options vers/formulaire doit remplir ces champs.
Vous pouvez créer un service et le partager entre les deux composants (celui à partir duquel vous vous déplacez et celui vers lequel vous vous déplacez).
Déclarez tous les paramètres que vous souhaitez transmettre à l'URL, dans le service, et avant la router.navigate([])
, définissez les valeurs des paramètres dans le service.
Vous pouvez accéder à ces paramètres à partir de l'autre composant avec ce service.
Exemple:
SharedService
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class SharedService {
data1;
test2;
test;
}
Component1
import { SharedService } from 'location';
import { Router } from '@angular/router';
...
constructor(private _sharedService: SharedService,
private _router: Router) { }
...
this._sharedService.data1 = 'test'
this._sharedService.test2 = 2323;
this._sharedService.test = 'AAAAAAAA';
this._router.navigate(['/my-new-route']);
...
Component2
import { SharedService } from 'location';
...
private test2;
private test;
private data1;
constructor(private _sharedService: SharedService){ }
ngOnInit() {
this.data1 = this._sharedService.data1;
this.test2 = this._sharedService.test2;
this.test = this._sharedService.test;
...
}
Il y a peu de façons de le faire.
Essayez 1:
this.router.navigate(['/some-url'], { queryParams: filter, skipLocationChange: true});
Essayez 2:
Nous pouvons utiliser ce travail à la place en utilisant EventEmitter et BehaviorSubject avec un service partagé
Dans la composante 1:
this.router.navigate(['url']).then(()=>
this.service.emmiter.emit(data)
)
En service :
emmiter : EventEmitter = new EventEmitter();
Dans le composant 2: constructeur intérieur
this.service.emmiter.subscribe();