В одном из моих шаблонов маршрутов Angular 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}
)]
Проблема с этим подходом состоит в том, что я предполагаю, что не могу передать сложные данные (например, объект как property3) в url;
2-й ПОДХОД
Альтернативой может быть включение SecondComponent в качестве директивы в FirstComponent.
<SecondComponent [p3]="property3"></SecondComponent>
Однако я хочу направить к этому компоненту, а не включать его!
3-й ПОДХОД
Наиболее жизнеспособным решением, которое я вижу здесь, было бы использование службы (например, FirstComponentService) для
- сохранить данные (_firstComponentService.storeData ()) на routeWithData () в FirstComponent
- получить данные (_firstComponentService.retrieveData ()) в ngOnInit () в SecondComponent
Хотя такой подход кажется вполне жизнеспособным, мне интересно, является ли это самым простым / изящным способом достижения цели.
В общем, я хотел бы знать, пропускаю ли я другие потенциальные подходы для передачи данных между компонентами, особенно с меньшим количеством кода
state
проверки PR для более подробной информации. Немного полезной информации здесь