加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在两个模块之间共享服务 – @NgModule在角度之间而不是在组

发布时间:2020-12-17 07:06:05 所属栏目:安全 来源:网络整理
导读:在我的应用程序中,我有两个不同的引导程序模块(@NgModule)在一个应用程序中独立运行.没有一个角度app位单独的bootstrap模块,现在我希望他们应该相互通信并共享数据. 我知道通过@Injectable服务作为模块中的提供者,我可以在@NgModule下的所有组件中共享数据,
在我的应用程序中,我有两个不同的引导程序模块(@NgModule)在一个应用程序中独立运行.没有一个角度app位单独的bootstrap模块,现在我希望他们应该相互通信并共享数据.

我知道通过@Injectable服务作为模块中的提供者,我可以在@NgModule下的所有组件中共享数据,但是我将如何在两个不同模块之间共享数据(不是模块内部的组件).

有没有办法在另一个模块中访问一个服务对象?有没有办法可以访问浏览器内存中可用的服务对象并在我的其他角度模块中使用它?

解决方法

您可以在Angular之外实例化一个服务并提供一个值:

class SharedService {
  ...
}
window.sharedService = new SharedService();

@NgModule({
  providers: [{provide: SharedService,useValue: window.sharedService}],...
})
class AppModule1 {}

@NgModule({
  providers: [{provide: SharedService,...
})
class AppModule2 {}

如果一个应用程序更改SharedService中的状态或调用导致Observable发出值的方法,并且订阅者与发射器位于不同的应用程序中,则订阅者中的代码将在发射器的NgZone中执行.

因此在订阅SharedService中的observable时使用

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?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读