当前,我们的团队开发了具有少量组件的简单的angular 6应用程序,并且它们工作正常,但是我们知道这些组件之间的耦合程度太高(他们对自己的了解太多)。因此,自然而然地,我们希望转向在Angle 6应用程序内的流行事件/消息总线这样的解耦解决方案。
因此,组件应该彼此了解而不是互相服从,而应该只了解消息总线,而只关心发布到总线上并订阅了什么。
此示例实现基于 Subscription 类,但根据Internet更好的解决方案,将使用 BehaviorSubject 。
所以我有一些问题:
值得更改订阅-> BehaviorSubject吗?
从“ @ angular / core”导入{Injectable}; 从'rxjs / Rx'导入{Observable,Subject}; 从'rxjs / operators'导入{过滤器,地图};
导出接口IClassConstructor { new(... args:any []):T; }
导出接口IMessage { 频道:功能; 内容:任何; } / **简单的基于类的发布/订阅消息总线,以提供事件,动作,命令的分离通信* / @Injectable() 导出类MessageService { 私人消息= new Subject();
public publish<T>(messageInstance: T): void { // Flux/Redux: 'dispatch'
const channel = messageInstance.constructor;
this.message.next({'channel': channel, 'content': messageInstance}); // Redux: {'type': string, 'payload': any }
}
public subscribe<T>(messageClass: IClassConstructor<T>): Observable<T> {
const channel: IClassConstructor<T> = messageClass;
return this.message.pipe(
filter((message: IMessage) => {
return message.channel === channel;
}),
map((message: IMessage) => {
return message.content;
})
);
}
}