In einer der Vorlagen meiner Angular 2-Routen ( FirstComponent ) habe ich eine Schaltfläche
first.component.html
<div class="button" click="routeWithData()">Pass data and route</div>
Mein Ziel ist es zu erreichen:
Klicken Sie auf die Schaltfläche -> Route zu einer anderen Komponente, während Sie die Daten beibehalten und die andere Komponente nicht als Direktive verwenden.
Das habe ich versucht ...
1. ANSATZ
In derselben Ansicht speichere ich das Sammeln derselben Daten basierend auf Benutzerinteraktion.
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
}
}
Normalerweise würde ich den Weg nach SecondComponent durch
this._router.navigate(['SecondComponent']);
eventuell die Daten weitergeben
this._router.navigate(['SecondComponent', {p1: this.property1, p2: property2 }]);
Die Definition der Verknüpfung mit Parametern wäre
@RouteConfig([
// ...
{ path: '/SecondComponent/:p1:p2', name: 'SecondComponent', component: SecondComponent}
)]
Das Problem bei diesem Ansatz ist, dass ich vermutlich keine komplexen Daten (z. B. ein Objekt wie property3) in der URL übergeben kann.
2. ANSATZ
Eine Alternative wäre, SecondComponent als Direktive in FirstComponent aufzunehmen.
<SecondComponent [p3]="property3"></SecondComponent>
Ich möchte jedoch zu dieser Komponente routen und sie nicht einschließen!
3. ANSATZ
Die praktikabelste Lösung, die ich hier sehe, wäre die Verwendung eines Dienstes (z. B. FirstComponentService) für
- Speichern Sie die Daten (_firstComponentService.storeData ()) auf routeWithData () in FirstComponent
- Abrufen der Daten (_firstComponentService.retrieveData ()) in ngOnInit () in SecondComponent
Obwohl dieser Ansatz durchaus praktikabel erscheint, frage ich mich, ob dies der einfachste / eleganteste Weg ist, um das Ziel zu erreichen.
Im Allgemeinen würde ich gerne wissen, ob mir andere mögliche Ansätze fehlen , um die Daten zwischen Komponenten zu übertragen, insbesondere mit der weniger möglichen Menge an Code
stateÜberprüfen Sie die PR auf weitere Details. Einige nützliche Informationen hier