在我的Angular 2路线模板之一(FirstComponent)中,我有一个按钮
first.component.html
<div class="button" click="routeWithData()">Pass data and route</div>
我的目标是实现:
单击按钮->路由到另一个组件,同时保留数据并且不使用另一个组件作为指令。
这就是我尝试过的...
第一种方法
在同一视图中,我存储的是基于用户交互收集的相同数据。
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}
)]
这种方法的问题在于,我想我无法在URL中传递复杂的数据(例如,诸如property3之类的对象)。
第二种方法
另一种选择是将SecondComponent作为指令包含在FirstComponent中。
<SecondComponent [p3]="property3"></SecondComponent>
但是我想路由到该组件,而不包括它!
3RD方法
我在这里看到的最可行的解决方案是使用服务(例如FirstComponentService)来
- 将数据(_firstComponentService.storeData())存储在FirstComponent中的routeWithData()上
- 检索SecondComponent中ngOnInit()中的数据(_firstComponentService.retrieveData())
尽管这种方法似乎完全可行,但我想知道这是否是实现目标的最简单/最优雅的方法。
总的来说,我想知道我是否缺少其他可能的方法来在组件之间传递数据,尤其是在代码量较少的情况下