我有两个模块:
第一
@NgModule({
imports: [
BrowserModule,
FormsModule,
SharedModule.forRoot()
],
declarations: [
FirstComponent
],
bootstrap: [ FirstComponent ]
})
export class AppModule { }
第二
@NgModule({
imports: [
BrowserModule,
FormsModule,
SharedModule.forRoot()
],
declarations: [
ScndComponent
],
bootstrap: [ ScndComponent ]
})
export class AppModule { }
和共享模块与静态.forRoot()
@NgModule( {} )
export class SharedModule {
static forRoot() {
return {
ngModule : SharedModule,
providers : [DumyService]
}
}
}
我的DumyServise有一些道具'paramd',我想通过模块观看更改
@Injectable()
export class DumyService {
paramd : string;
}
在模块的两个组件(第1和第2)中,我有
private ds: DumyService
在构造函数中。
然后,假设我在第一个模块组件的某个组件中有一些onclick方法,它会发生变化
clickToChangeParam() {
this.ds.paramd = 'new value';
}
我想在两个模块中进行此更改。 我该怎么处理?
答案 0 :(得分:3)
有几个类似的问题可以帮助你
主要思想是创建Select branchid,screenid,'People' as screencapacity
from screen
where (screenid = 'S1' or SCREENID='S3')
AND(BRANCHID = 'B1' OR BRANCHID='B4')
的实例,并在引导两个组件时将其用作SharedService
。
extraProviders
<强> Plunker Example 强>
也许最好的方法是使用一个平台实例:
var sharedService = new SharedService();
platformBrowserDynamic([{ provide: SharedService, useValue: sharedService }]).bootstrapModule(AppModule)
platformBrowserDynamic([{ provide: SharedService, useValue: sharedService }]).bootstrapModule(AppModule2)
<强> Plunker Example 强>
有重要的事情(如@Günter所说)
订阅应用程序需要在调用时调用更改检测 从另一个Angular应用程序接收一个新值,因为这个 代码在发送应用程序的区域中调用。
这就是我在上面的例子中使用var platform = platformBrowserDynamic([SharedService]);
platform.bootstrapModule(AppModule)
platform.bootstrapModule(AppModule2)
的原因。
但我想展示一个技巧。我们“可以使用已知cd.detectChanges()
”来引导模块。这样我们就不用担心Zone
的召唤了。这两个应用程序都可以在一个detectChanges
中使用:
Zone
<强> Plunker Example 强>
希望它有所帮助!