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

Pass top level route Id to other top level routes as is they were child routes

我有一个项目概览作为入口页面。

当我单击打开项目按钮时,projectId 被传递到里程碑视图。当我在里程碑视图中时,我想使用 projectId 激活任务视图。

如果 milestones/tasks 是子路由,这种情况很容易发生,但它们不是!所有 3 个视图都属于顶级路由。

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

我还能如何实现我想要的?

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

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

在方法 setProject() 中,将选定的项目 ID 存储在 class 变量中,并使用类型为 EventEmitter 的 class var 发出携带选定项目 ID 作为负载的事件。

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

这样,只要用户单击“里程碑”或“任务”链接,他们就会获得项目 ID。此外,如果用户在其他路由之一处于活动状态时选择了不同的项目,则新值将通过订阅提供给该底层组件。