我们有一种情况,我们有一个根模块和相应的根存储,以及多个功能模块和它们自己的功能存储.
我们需要不同的功能模块来分派根存储操作,从而更新根存储中的状态.
我知道每个功能状态都可以访问根状态,但我想知道是否有方法以不同的方式进行模块间通信?
我想要避免的是对根模块的直接依赖.
那么,有没有其他机制可以在模块之间交换信息呢?
PS. 模块是延迟加载的.
我们有一种情况,我们有一个根模块和相应的根存储,以及多个功能模块和它们自己的功能存储.
我们需要不同的功能模块来分派根存储操作,从而更新根存储中的状态.
我知道每个功能状态都可以访问根状态,但我想知道是否有方法以不同的方式进行模块间通信?
我想要避免的是对根模块的直接依赖.
那么,有没有其他机制可以在模块之间交换信息呢?
PS. 模块是延迟加载的.
用providedIn: root
创建服务(不要在任何地方导入这个服务!),使用变量进行模块之间的通信,如果需要调用方法,需要使用EventBus using Subject on a service (not by me!)
我们可以订阅侦听器并从位于不同模块中的两个组件发出事件,只要它们位于同一Angular 应用程序中,就可以使用此方法进行自由通信!
如果您在根目录中提供了ProvidedIn,则服务将自动在根目录中应用,无需导入!
import { Injectable } from '@angular/core';
import { Subject, Subscription } from 'rxjs';
import { filter, map } from 'rxjs/operators';
import { ConsoleData } from './ConsoleData';
@Injectable({
providedIn: 'root',
})
export class EventBusService {
sharedVariable = '';
private subject$ = new Subject();
emit(event: ConsoleData) {
this.subject$.next(event);
}
on(event: string, action: any): Subscription {
return this.subject$
.pipe(
filter((e: ConsoleData) => e.name == event),
map((e: ConsoleData) => e.value)
)
.subscribe(action);
}
constructor() {}
}
尽管所提供的StackFlitz不是延迟加载的,但是该概念适用于相同的,