В одному з моїх шаблонів кутових 2 маршрутів ( FirstComponent ) у мене є кнопка
first.component.html
<div class="button" click="routeWithData()">Pass data and route</div>
Моя мета - досягти:
Натисніть кнопку -> маршрут до іншого компонента, зберігаючи дані та не використовуючи інший компонент як директиву.
Це те, що я спробував ...
1-й ПІДХІД
У цьому ж представленні я зберігаю ті самі дані на основі взаємодії з користувачем.
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
}
}
Зазвичай я б маршрут SecondComponent по
this._router.navigate(['SecondComponent']);
врешті-решт передача даних мимо
this._router.navigate(['SecondComponent', {p1: this.property1, p2: property2 }]);
тоді як визначення зв'язку з параметрами було б
@RouteConfig([
// ...
{ path: '/SecondComponent/:p1:p2', name: 'SecondComponent', component: SecondComponent}
)]
Проблема такого підходу полягає в тому, що я думаю, що я не можу передати складні дані (наприклад, об'єкт, наприклад, властивість3) в url;
2-й ПІДХІД
Альтернативою може бути включення SecondComponent в якості директиви в FirstComponent.
<SecondComponent [p3]="property3"></SecondComponent>
Однак я хочу , щоб маршрут до цього компоненту, не включити його!
3-й ПІДХІД
Найбільш життєздатним рішенням, яке я бачу тут, було б використання Сервісу (наприклад, FirstComponentService) для
- зберігати дані (_firstComponentService.storeData ()) на routeWithData () у FirstComponent
- отримати дані (_firstComponentService.retrieveData ()) у ngOnInit () у SecondComponent
Хоча такий підхід здається цілком життєздатним, мені цікаво, чи це найпростіший / найелегантніший спосіб досягти мети.
Загалом, я хотів би знати, чи не вистачає мені інших потенційних підходів для передачі даних між компонентами, особливо з меншою можливою кількістю коду
state
перевірки PR для отримання детальної інформації. Деяка корисна інформація тут