将顶级路线Id传递给其他顶级路线,因为它们是子路线

时间:2016-12-28 21:07:45

标签: angular angular2-routing angular2-router3

我有一个项目概述作为输入页面。

当我单击打开的项目按钮时,projectId将传递给Milesstones视图。当我在里程碑视图中时,我想使用projectId激活Tasks视图。

如果里程碑/任务是子路线,这种情况很容易实现,但它们不是!所有3个视图都属于顶级路线。

使用子路由的AFAIK意味着组件也必须是ui层次结构中的子组件,因此我不能拥有3个并行/侧边视图。

我还能如何实现我的目标?

enter image description here

1 个答案:

答案 0 :(得分:0)

创建服务并将其注入到三个组件中。

在此服务中创建方法setProject(projectID)和getProject()。当用户单击打开的按钮时,在传递所选项目的服务上调用此方法。

在方法内部,setProject()将选定的projectID存储在类变量中,并使用类型为EventEmitter的类var发出将所选projectID作为有效内容的事件。

在另外两个组件的构造函数中,立即调用服务上的getProject()并订阅该EventEmitter。

这样,只要用户点击里程碑或任务链接,他们就会获得项目ID。此外,如果用户选择其他项目而其他路线之一处于活动状态,则新值将通过订阅对该基础组件可用。