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