捕获从注入组件的服务发出的事件

Vla*_*vic 4 components parent-child event-handling angular

我通过依赖注入插入了一个服务组件(组件A),这个服务组件A不在组件B的模板中。

如何捕获从服务组件发出的事件 - 如何在父组件(组件 B)中捕获它?我已经将发射命令放在子组件中,如下所示:

@Output() hostReady = new EventEmitter();
Run Code Online (Sandbox Code Playgroud)

我正在发出这样的事件:

hostReady.emit();
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能在父级中捕获它?

Vla*_*vic 6

好吧,既然我之前没有发布我的解决方案,我不妨现在就发布。所以,我所做的是我实现了一个模式订阅者。所有想要了解事件的组件都订阅了它,并且当事件被触发时,他们就知道了。解决方案处理 rxjs 对象:

import { Subject } from 'rxjs/Subject';

我有一个特殊的组件intercommService,将事件声明为 rxjs 主题,如下所示:

selectedLanguage: Subject<string>;
constructor() {
    this.selectedLanguage = new Subject<any>(); 
}
Run Code Online (Sandbox Code Playgroud)

然后,每个组件(也注入了此依赖项)可以使用以下命令触发事件:

this.intercomm.selectedLanguage.next(language);
Run Code Online (Sandbox Code Playgroud)

并且每个订阅者组件都将其作为对该事件的订阅,即在构造函数中,订阅者将注入该依赖项,并将观察其事件:

constructor(private intercomm: IntercommService) {
    this.intercomm.selectedLanguage.asObservable().subscribe((value: any) => {
        // Do something with value
    });
}
Run Code Online (Sandbox Code Playgroud)