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