angular2未签署变更的主体

angular2未签署变更的主体,angular,angular2-services,angular-cli,Angular,Angular2 Services,Angular Cli,我有两个组件和一个由这两个组件共享的共享服务 shared.service.ts // ..... top level codes are skipped private pickAnalysisForBubble = new Subject<any>(); analysisForBubble$ = this.pickAnalysisForBubble.asObservable(); mapToggleToPointOrBubble(value) { this.

我有两个组件和一个由这两个组件共享的共享服务

shared.service.ts

// ..... top level codes are skipped

private pickAnalysisForBubble = new Subject<any>();

  analysisForBubble$ = this.pickAnalysisForBubble.asObservable();

  mapToggleToPointOrBubble(value) {
    this.pickAnalysisForBubble.next(value);
  }
map.component.ts

// ..... top level codes are skipped

private pickAnalysisForBubble = new Subject<any>();

  analysisForBubble$ = this.pickAnalysisForBubble.asObservable();

  mapToggleToPointOrBubble(value) {
    this.pickAnalysisForBubble.next(value);
  }
我已经导入了
shared.service
,并添加了一个构造函数。然后在
ngOnInit
中尝试
subscribe
更改,但这不起作用


我正在使用
subject
检测基于此的更改。我做错了什么?

我猜您没有共享相同的服务实例。在引导应用程序时或在主组件中指定相应的提供程序:

bootstrap(AppComponent, [ SharedService ]);

如果在子组件的
providers
属性中指定它,则不能确保共享同一实例

编辑


由于分层结构,每个组件都有自己的实例,而不是共享同一个实例。因此,共享服务应该作为提供者添加到
main
组件中。此外,电子共享服务不应包含在子组件的提供者中

是的,我在两个组件中都添加了
sharedService
作为提供者。我在
main.ts
文件中也在我的子组件中添加了
sharedService
。仍然不起作用。有什么线索吗?这就是问题所在;-)在这种情况下,每个组件都有自己的实例,而不是共享同一个实例。这是因为层次结构。请从子组件中删除提供程序。他们阻止事情发生……是的,它在发生作用。从我的子组件中删除提供程序有效。
# analysisInteraction is the shared service constructor
this.analysisInteraction.analysisForBubble$.subscribe(
        data => {
          this.DrawType = data;
          console.log("Drawtype fixed");
      });
bootstrap(AppComponent, [ SharedService ]);
@Component({
  (...)
  providers: [ SharedService ]
})
export class AppComponent {
  (...)
}