繁体   English   中英

我想使用rxjs来检测多个组件中的值变化。 但它只显示改变它的组件的变化

[英]I want to use rxjs subject to detect the value change in multiple components. But it only shows change in the component which changes it

我正在使用不同的模块,因此它可以用于延迟加载的模块。 这是我的服务文件。

 import {NgModule, Injectable } from '@angular/core' import {Subject} from 'rxjs/Subject'; @Injectable() export class ChangeEventService { public invokeEvent:Subject<any> = new Subject(); // localId:any = { name:'', eventId:0, orgId:0}; constructor() { } public callComponent(currentId:any):void { console.log("Invoked"); this.invokeEvent.next({localId:currentId}); } } @NgModule({ imports: [ ], exports : [ ], providers: [ ChangeEventService ], }) export class ChangeEventModule { } 

对Rxjs主题的订阅仅在更改它的组件/服务中发生变化。

 export class xyz { constructor(private change: ChangeEventService) { this.change.invokeEvent.subscribe((value) => { this.event = value.localId; console.log("I'm chnaged...!!"); }); } anyFunction(eventdata:any) { this.change.callComponent(eventdata); } } 

我只获得更新的值在更改invokeEvent值的组件中。

正如@Philipp评论的那样,我通过在多个模块中提供服务来创建多个服务实例。 正如@AngularFrance所建议的那样,我在app.module的提供者(我的应用程序的第一个模块)中声明了它。 我没有在任何订阅中获得更新值(除了调用callComponent的那个)第一次。所以我使用了BehaviorSubject并给了它任何随机的初始值。 所以现在它在初始时向一个组件发送初始值,而不是在更新时向所有订户发送更新值。

所以我想这解决了我的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM