Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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
Angular 收听服务角度2/4中的变量更新_Angular_Sockets_Service_Rxjs_Angular2 Services - Fatal编程技术网

Angular 收听服务角度2/4中的变量更新

Angular 收听服务角度2/4中的变量更新,angular,sockets,service,rxjs,angular2-services,Angular,Sockets,Service,Rxjs,Angular2 Services,我在全球服务中有一些目标。其中一个组件使用套接字并更新此对象,但另一个组件未得到任何更改 计划服务 @Injectable() export class PlanService { private subject = new Subject<any>(); private planSubject = new Subject<any>(); public planList; constructor( private socket: Sock

我在全球服务中有一些目标。其中一个组件使用套接字并更新此对象,但另一个组件未得到任何更改

计划服务

@Injectable()
export class PlanService {

    private subject = new Subject<any>();
    private planSubject = new Subject<any>();
    public planList;
    constructor( private socket: SocketClientService) { 
           this.socket.on('plan');

    }
第二个组件应该侦听并更新

planService.planList


我是Angular 2的新手

你可以把你的计划列表变成一个主题,就像你的私人成员一样

@Injectable()
export class PlanService {
    ...
    public planList = new Subject<any>();
    ...
}
然后,您可以订阅任何其他组件/服务中的planList更改

...

this.planService.planList.subscribe(data => {
  console.log(data) // planList Data
});

没有简单的方法可以仅仅监视变量的更改,您必须以某种方式触发更改事件(通过事件发射器)或使用可观察的包装器。下面是一个简单的事件发射器示例:看起来您刚刚将一个新值设置为
planList
变量。它不能被“监听”,当
planList
值更改时,应通知第二个组件,如
ngOnChanges
。但如果有更多的组件在值发生变化时需要通知,那么最好将
planList
转换为可观察的
...
this.planService.getUserBusy().distinctUntilChanged().subscribe((data) => 
{
  this.planService.planList.next(data);  /* update */
});
...
...

this.planService.planList.subscribe(data => {
  console.log(data) // planList Data
});