【问题标题】:How do you attach an EventEmitter Output to a component under routing?如何将 EventEmitter 输出附加到路由下的组件?
【发布时间】:2016-06-23 01:41:34
【问题描述】:

我有一个路线配置

@RouteConfig([
    { path: '/', name: 'Start', component: Journal },
    { path: '/register', name: 'Register', component: Register },
    { path: '/login', name: 'Login', component: Login },
    { path: '/settings', name: 'Settings', component: Settings },
])

我想收听 Journal 的 @Output 发出的事件。当我在模板中的唯一参考是

时,我该怎么做
<a class="nav-item nav-link" [routerLink]="['Journal']">Journal</a>

?

【问题讨论】:

  • You can't。您必须使用共享服务。
  • 谢谢 - 这就是我最终要走的方向
  • @EricMartinez 感谢链接。这太令人沮丧了。如果您有嵌套路由,那么 eventEmitters 根本就没有用,所有都应该使用服务来完成!出于这个特定的原因,我正在考虑集成 Redux。虽然我喜欢 Angular 2,但它有其局限性,还应该考虑集成类似 Redux 的理念。在我的项目中,我倾向于做一些类似 Redux 的事情,在根文件夹中引入服务并在需要的地方注入它们。

标签: angular angular2-routing


【解决方案1】:

我意识到这已经很老了,但是将状态传递给路由是不可撤销的。这主要是因为routerLink 是通用的,可以接收任意数量 的潜在孩子。因此,即使您可以传递状态或处理其事件,您最终也会得到不必要的复杂性。

管理父组件和子组件之间状态的正确方法是shared service。本质上,它归结为以下步骤:

  1. 编写服务。
  2. 不是从您的模块提供服务,而是从父组件提供服务(以使其无法被外部代码访问)。
  3. 将服务注入父级和任何需要它的子级。

这对于传递给子进程的状态和从子进程接收到的通知同样适用,并且不会污染路由设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多