[英]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.