在我的应用程序中,我有两个不同的 bootstrap 模块(@NgModule
)在一个应用程序中独立运行.没有一个单独的 bootstrap 模块,现在我希望它们应该相互通信并共享数据.
我知道通过@Injectable
服务作为模块中的提供者,我可以在@NgModule
下的所有组件中共享数据,但我将如何在两个不同的模块(而不是模块内的组件)之间共享数据.
有没有办法在另一个模块中访问一个服务对象?有没有办法访问浏览器内存中可用的服务对象,并在我的其他模块中使用它?
在我的应用程序中,我有两个不同的 bootstrap 模块(@NgModule
)在一个应用程序中独立运行.没有一个单独的 bootstrap 模块,现在我希望它们应该相互通信并共享数据.
我知道通过@Injectable
服务作为模块中的提供者,我可以在@NgModule
下的所有组件中共享数据,但我将如何在两个不同的模块(而不是模块内的组件)之间共享数据.
有没有办法在另一个模块中访问一个服务对象?有没有办法访问浏览器内存中可用的服务对象,并在我的其他模块中使用它?
2021-02-03个
在最近的Angular 版本中,这是使用@Injectable({providedIn: 'platform'})
解决的
https://angular.io/api/core/Injectable
Original个
您可以在Angular之外实例化服务,并提供一个值:
class SharedService {
...
}
window.sharedService = new SharedService();
@NgModule({
providers: [{provide: SharedService, useValue: window.sharedService}],
...
})
class AppModule1 {}
@NgModule({
providers: [{provide: SharedService, useValue: window.sharedService}],
...
})
class AppModule2 {}
如果一个应用程序在SharedService
中改变状态,或者调用使AN Observable
emits 值的方法,并且订阅者位于与emits 器不同的应用程序中,则订阅者中的代码在emits 器的NgZone
中执行.
因此,当订阅一个可观察的SharedService
使用
class MyComponent {
constructor(private zone:NgZone, private sharedService:SharedService) {
sharedService.someObservable.subscribe(data => this.zone.run(() => {
// event handler code here
}));
}
}
另见第How to dynamically create bootstrap modals as Angular2 components?页