Angular 2 从服务访问组件变量,该服务绑定到另一个服务,该服务绑定到组件

Angular 2 access component variable from service, that is bound to another service, which is bound to component

问题很简单:如何从服务访问变量而不通过函数本身传递组件变量?

我不想通过函数传递它,因为我想从 tabs.service 访问位于 AppComponent 中名为 thingies 的变量 BUTsitetree.service 调用。函数 f_in_sitetreeService 会在某个时间某个地方被动态调用(在 plunker 中我从 appcomponent 调用它,但实际上它会从另一个地方调用)。

换句话说,我有一个服务正在调用另一个服务函数,后者又访问它的组件变量。

我想要的:

tabs.service 中我注释掉了 2 行,这会推送一个新的东西,然后记录数组。将它们注释掉是因为我不知道如何正确 declare/access 那里的组件阵列,而这正是我需要知道的。

笨蛋: http://plnkr.co/edit/rFSW1UXz7Gw1rMXlD2Md?p=preview

我不确定我是否理解你的问题,但我会尝试回答...

听起来您希望 TabsService 操作在某个组件(在您的示例中为 AppComponent)上定义的 属性。第一条评论:这可能不是一个好方法。通常服务应该拥有应用程序数据,而不是组件。

但是,如果你真的 need/want 这样做,你必须以某种方式将对数组的引用传递给你的服务,比如在 AppComponent 的 ngOnInit 中:

ngOnInit() {
   this.tabsService.setArrayReference(this.thingies);
}

然后在 TabsService 中:

setArrayReference(ref) { this.thingies = ref; }

由于我们处理的是 JavaScript 引用类型,AppComponent 和 TabsService 现在都将引用 same/one 数组。

现在您可以从 AppComponent 和 TabsService 访问和操作数组。

Updated plunker.