W jednym z moich szablonów tras Angular 2 ( FirstComponent ) mam przycisk
first.component.html
<div class="button" click="routeWithData()">Pass data and route</div>
Moim celem jest osiągnięcie:
Kliknij przycisk -> wybierz trasę do innego komponentu, zachowując dane i bez używania tego komponentu jako dyrektywy.
Właśnie tego próbowałem ...
1. PODEJŚCIE
W tym samym widoku przechowuję gromadzenie tych samych danych na podstawie interakcji użytkownika.
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
}
}
Normalnie kierowałbym się do SecondComponent przez
this._router.navigate(['SecondComponent']);
ostatecznie przekazując dane
this._router.navigate(['SecondComponent', {p1: this.property1, p2: property2 }]);
natomiast definicja powiązania z parametrami byłaby
@RouteConfig([
// ...
{ path: '/SecondComponent/:p1:p2', name: 'SecondComponent', component: SecondComponent}
)]
Problem z tym podejściem polega na tym, że nie mogę przekazać złożonych danych (np. Obiektu takiego jak property3) do adresu URL;
2. PODEJŚCIE
Alternatywą byłoby włączenie SecondComponent jako dyrektywy w FirstComponent.
<SecondComponent [p3]="property3"></SecondComponent>
Jednak chcę trasie do tego składnika, nie obejmują go!
3. PODEJŚCIE
Najbardziej realnym rozwiązaniem, jakie tu widzę, byłoby skorzystanie z usługi (np. FirstComponentService)
- przechowuj dane (_firstComponentService.storeData ()) na routeWithData () w FirstComponent
- odzyskać dane (_firstComponentService.retrieveData ()) w ngOnInit () w SecondComponent
Chociaż takie podejście wydaje się całkowicie wykonalne, zastanawiam się, czy jest to najłatwiejszy / najbardziej elegancki sposób na osiągnięcie celu.
Ogólnie chciałbym wiedzieć, czy brakuje mi innych potencjalnych podejść do przekazywania danych między komponentami, szczególnie przy mniejszej możliwej ilości kodu
state
Sprawdź PR, aby uzyskać więcej szczegółów. Kilka przydatnych informacji tutaj