Angular 服务值更新时在组件上运行功能(角度6)

Angular 服务值更新时在组件上运行功能(角度6),angular,service,Angular,Service,我正在创建一个结构如下的应用程序: @Input() set group(g) { this.selectedGroup = g; this.findUsers(this.selectedGroup); // this is what I want to achieve } 单击MenuComponent中的项目时,它会向仪表板组件发送一个对象,然后从仪表板组件发送到Overview组件和UserComponent。然后,它们在@Input()中运行一个函数,根据

我正在创建一个结构如下的应用程序:

  @Input()
  set group(g) {
    this.selectedGroup = g;
    this.findUsers(this.selectedGroup); // this is what I want to achieve
  }

单击MenuComponent中的项目时,它会向仪表板组件发送一个对象,然后从仪表板组件发送到Overview组件和UserComponent。然后,它们在@Input()中运行一个函数,根据接收到的数据获取各种数据,这些数据可以被操作

但是,我需要能够将更改后的数据从外部包装器一起保存,因为我不想将数据发送回仪表板组件,所以我选择使用带有共享变量的服务。这很好,只是我没有找到与@Input()类似的方法,在服务变量更改时在组件上运行函数。当在菜单中选择一个新项目时,我需要它来获取新数据。我在这里读了一些以前的帖子,但是大多数帖子都使用BehaviorSubject来订阅更改-但是我找不到任何帖子,当服务中的变量更改时,他们在组件上运行函数。顺便说一下,这个变量是一个JSON对象。任何指点都很感激

编辑:在添加服务之前,我使用@Output将值从MenuComponent发送到DashboardComponent。我通过DashboardComponent中的选择器以@Input:

<app-menu-component (emitGroup)="getGroup($event)"></app-menu-component>

有什么方法可以从服务中做类似的事情吗?

从问题及其描述中,我认为您希望这样:

您可以创建如下服务:

shared.service.ts

@Injectable()
export class SharedService {

mySubject : Subject<any> = new Subject<any>();
myData : any ;

myDataSetter(data : any){
 this.myData = data;
 this.mySubject.next(this.myData);
}

从问题及其描述来看,我认为你想要这样的东西:

您可以创建如下服务:

shared.service.ts

@Injectable()
export class SharedService {

mySubject : Subject<any> = new Subject<any>();
myData : any ;

myDataSetter(data : any){
 this.myData = data;
 this.mySubject.next(this.myData);
}

您可能想要这样的东西:。如果没有,那么发布一个最小的完整示例(代码!!)来重现这个问题。很遗憾,我不能真正分享代码。我在主帖子中添加了一些附加信息,以更好地解释我想要实现的目标。您可以从服务中的主题发出更改后的值,然后在组件中订阅该主题,在subscribe回调函数中执行任何您想要的操作。你读过我链接的例子吗?是的,但我不明白你可以在订阅中做任何事情。如果是这样的话,我每次都会运行。下一步从服务开始,我想这可能会按照我的要求运行。:)您可以使用
BehaviorialSubject
或仅使用
Subject
来完成此工作。您可能需要这样的内容:。如果没有,那么发布一个最小的完整示例(代码!!)来重现这个问题。很遗憾,我不能真正分享代码。我在主帖子中添加了一些附加信息,以更好地解释我想要实现的目标。您可以从服务中的主题发出更改后的值,然后在组件中订阅该主题,在subscribe回调函数中执行任何您想要的操作。你读过我链接的例子吗?是的,但我不明白你可以在订阅中做任何事情。如果是这样的话,我每次都会运行。下一步从服务开始,我想这可能会按照我的要求运行。:)你可以使用
BehaviorialSubject
或只是一个
Subject
来做这项工作。我已经有了这项服务,但这正是昨天Jb Nizet澄清后我所做的。将答案标记为已接受。:)我已经有了这项服务,但这正是我昨天从Jb Nizet得到澄清后所做的。将答案标记为已接受。:)
in your component subscribe to the subject in the service during the ``ngOnInit()`` this way : 

this._sharedService.mySubject.subscribe((data) => {
 //call my function
})