从组件到app.component的Angular EventEmitter

时间:2018-04-18 11:44:40

标签: angular angular5 eventemitter

我想将子事件的事件发射器绑定到父组件,但是父组件是' app.component'因此我假设两者之间的关系未声明但是隐式。
this回答中,我看到如何将事件发射器添加到已在其父级中明确声明的子级:

<child (notifyParent)="getNotification($event)"></child>

但是在我的应用程序中,子组件(允许调用id:child)不是以这种方式声明的,而是在app.module中声明为路由:

const appRoutes: Routes = [
  { path: '**',      component:  Child}
];

此组件基本上代表站点的启动页面,并且在未提供完全身份验证的情况下也用作防护中的重定向。
我想做的是向child添加一个事件发射器,通知app.module更改。
我已经在child EventEmitter中使用@Output()装饰器实现了,我还实现了将在app.module中调用的方法,但我无法找到一个位置在两个组件中注册此绑定的位置 由于所有组件都是app.component的子组件,不应该app.component提供一种方法来注册来自其子组的传入输入,而不需要首先明确地将它们声明为子项?

3 个答案:

答案 0 :(得分:2)

嗯,根据我的理解,您必须明确绑定app.componentchild.component以实际使Event发射器工作。

从您的方案中,您还可以考虑使用Subject来实现相同目标。您不必为每个child.component明确定义,而只需订阅并收听正在发生的任何更改。

I have created one link to help two sibling & parent components talk。你可以为几个孩子和一个父母做同样的事情

答案 1 :(得分:0)

在“父母”html模板中调用“子”组件时,会给出父子组件关系。因此,如果您的组件位于app.components html模板中,那么它就是app.component的子项,您可以使用EventEmitters在两者之间传递数据。

如果这两者之间有另一个组件,那么您必须使用服务来共享数据。

答案 2 :(得分:0)

您必须添加

<child (notifyParent)="getNotification($event)"></child>

在您的父组件模板中,即您的案例中的app.component,以便收听“notifyParent”事件。将方法实现从app.module移动到app.component.ts文件中,它将起作用。