有几个类似的问题可以帮助你
-
Angular 2,同一页面上运行的两个应用程序之间的通信 https://stackoverflow.com/questions/37611144/angular-2-communication-between-2-apps-running-on-the-same-page
- 如何动态创建引导模式作为 Angular2 组件? https://stackoverflow.com/questions/36566698/cant-initialize-dynamically-appended-html-component-in-angular-2
- Angular 2引导多根组件 https://stackoverflow.com/questions/37066421/angular-2-bootstrap-multi-root-component
主要思想是创建一个实例SharedService
并将其用作extraProviders
引导两个组件时。
var sharedService = new SharedService();
platformBrowserDynamic([{ provide: SharedService, useValue: sharedService }]).bootstrapModule(AppModule)
platformBrowserDynamic([{ provide: SharedService, useValue: sharedService }]).bootstrapModule(AppModule2)
笨蛋的例子 http://plnkr.co/edit/J05PAHgdZiOVlXRzbZxK?p=preview
也许最好的方法是使用一个平台实例:
var platform = platformBrowserDynamic([SharedService]);
platform.bootstrapModule(AppModule)
platform.bootstrapModule(AppModule2)
笨蛋的例子 http://plnkr.co/edit/Ht4dYqLBnFSbACpN0rHi?p=preview
有一件重要的事情(正如@Günter所说)
订阅应用程序需要在以下情况下调用更改检测:
从其他 Angular 应用程序接收一个新值,因为这
代码在发送应用程序的区域中被调用。
这就是我使用的原因cd.detectChanges()
在上面的例子中。
但我想展示一个技巧。我们“可以用已知的方式引导模块Zone
”。这样我们就不用担心调用detectChanges
。两个应用程序都可以在一个应用程序中运行Zone
:
const platform = platformBrowserDynamic([SharedService]);
platform.bootstrapModule(AppModule).then((moduleRef: NgModuleRef<any>) => {
const zone = moduleRef.injector.get(NgZone);
(<any>platform)._bootstrapModuleWithZone(AppModule2, [], zone); // private method is bad!!!
});
笨蛋的例子 http://plnkr.co/edit/XeoTl85e2XFcKDJNQggK?p=preview
希望它能有所帮助!