我想将子事件的事件发射器绑定到父组件,但是父组件是' 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
提供一种方法来注册来自其子组的传入输入,而不需要首先明确地将它们声明为子项?
答案 0 :(得分:2)
嗯,根据我的理解,您必须明确绑定app.component
和child.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文件中,它将起作用。