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

Posted

技术标签:

【中文标题】Angular 2从服务访问组件变量,即绑定到另一个服务,该服务绑定到组件【英文标题】:Angular 2 access component variable from service, that is bound to another service, which is bound to component 【发布时间】:2016-12-16 22:39:44 【问题描述】:

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

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

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

我想要什么:

tabs.service 中,我注释掉了两行,这会推送一个新的东西,然后记录数组。将它们注释掉是因为我不知道如何正确声明/访问那里的组件数组,这就是我需要知道的。

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

【问题讨论】:

【参考方案1】:

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

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

但是,如果您真的需要/想要这样做,您必须以某种方式将数组的引用传递给您的服务,例如在 AppComponent 中的 ngOnInit 中:

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

然后在 TabsService 中:

setArrayReference(ref)  this.thingies = ref; 

由于我们处理的是 javascript 引用类型,AppComponent 和 TabsService 现在都将引用同一个/一个数组。

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

Updated plunker.

【讨论】:

神圣的sn-ps!我不知道这样的功能,它就像一个魅力,谢谢!我也会考虑你所说的,关于将数据转移到服务:)

以上是关于Angular 2从服务访问组件变量,即绑定到另一个服务,该服务绑定到组件的主要内容,如果未能解决你的问题,请参考以下文章

如何在Angular中将变量从组件检索到另一个? (不在 Html 页面中,而是在组件中)

Angular 5服务变量未定义

将数据从一个组件传递到另一个 Angular 2

Angular5:将变量从一个组件传递到另一个打字稿文件

使用使用 Angular 6 的服务将 JSON 文件从一个组件传递到另一个组件

我如何从一种形式访问变量到另一种形式