Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用服务在同级组件之间共享对象?_Javascript_Angular - Fatal编程技术网

Javascript 如何使用服务在同级组件之间共享对象?

Javascript 如何使用服务在同级组件之间共享对象?,javascript,angular,Javascript,Angular,我需要调用一个组件上的服务,理想情况下,这个服务将获取另外2或3个组件中的信息(这些组件已经与数据库等进行了通信)。我需要能够共享对象 我创建了一个名为DashService的服务,如下所示: import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root', }) export class DashService { constructor() { } } 我已经将它链接到将为我们提供它的组

我需要调用一个组件上的服务,理想情况下,这个服务将获取另外2或3个组件中的信息(这些组件已经与数据库等进行了通信)。我需要能够共享对象

我创建了一个名为DashService的服务,如下所示:

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class DashService {

  constructor() { }

}
我已经将它链接到将为我们提供它的组件,并且我还将服务名称导入并添加到NgModule的“提供者”部分。 增加:

在将向服务发送信息的模块上

我不知道如何前进。如何将组件上存在的对象共享给我的服务?我未能正确设置构造函数(在发送信息的组件上)

当我尝试

public constructor( private DashService: DashService) 
我收到一个错误,告诉我“DashService引用了一个值,但被用作类型”


谢谢您的帮助。

因为您是以服务的类型调用该服务的

只需更改名称,通常服务的第一个字母是小写的

public constructor( private dashService: DashService) 
在这里,您可以找到一个如何在组件之间通信的示例。通常,对于父/子组件,您可以使用@Input/@Output decorator。
对于其他情况,您可以使用服务(或任何状态管理)

Riccardo Gai是正确的,您应该这样做才能使用服务,
公共构造函数(私有dashService:dashService)

但是为了回答您的问题,为了能够通过服务在组件之间共享数据,您应该在该服务中创建一个对象,例如公共对象,然后您可以通过该服务访问该对象

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class DashService {

  objectToShareHere: any;

  constructor() { }

}
我认为无论如何,最好的方法是使用get和set方法,并通过它们访问对象(使用私有obj)。像这样:

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class DashService {

  private objectToShareHere: any;

  constructor() { }

  setPrivateObj(obj) {
     this.objectToShareHere = obj;
  }

  getPrivateObj() {
     return this.objectToShareHere;
  }

}

如果您需要共享的数据来自BE,您可以使用Subject object(参见此处)

尝试阅读官方文件?据我有限的理解,这将是一种兄弟组件类型的情况,不是吗?谢谢。那太愚蠢了。您对如何与服务共享对象有何见解?@Dizzydizy与组件和服务共享数据的方法是使用可观察对象。您将数据放入服务上的可观察对象(通常是行为主体)。然后,通过注入服务来使用它,告诉组件使用该可观察对象。然后,如果您有一个需要其他数据的服务,它只需要访问包含数据的可观察对象。
import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class DashService {

  objectToShareHere: any;

  constructor() { }

}
import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class DashService {

  private objectToShareHere: any;

  constructor() { }

  setPrivateObj(obj) {
     this.objectToShareHere = obj;
  }

  getPrivateObj() {
     return this.objectToShareHere;
  }

}