从HTML页面调用时,RXJS订阅方法不起作用

时间:2019-04-23 18:20:34

标签: angular typescript rxjs

我正在尝试从HTML页面调用一个可观察对象,但是它不起作用。当 angular 调用该方法并显示输出时,该方法将按预期工作。但是,当我尝试通过按钮调用它时,它不起作用。

  

服务

deltasHistory = this.socket.fromEvent<any[]>('deltasHistory');

  

组件

constructor(private codeeditorservice: CodeeditorService){}
ngOnInit() {
this.deltaHistory$.subscribe(delta => {
      console.log(delta[30]); // Works perfectly
    })
}

现在,此invoke()<button (click)="invoke()">Button</button>发起,但什么也不显示。

  组件HTML中的

按钮

  invoke(){
    console.log("invoking") // displays
    this.deltaHistory$.subscribe(delta => {
      console.log(delta[30]);
}) //nothing
  }

如何解决范围问题?

1 个答案:

答案 0 :(得分:1)

您将要更新服务deltaHistory以返回最后给定的结果。您可以通过使用rxjs中的shareReplay运算符来做到这一点:

deltasHistory = this.socket.fromEvent<any[]>('deltasHistory').pipe(
  shareReplay(1)
);

现在,在最后一次发出之后进行的所有订阅都将获得最后一次发出的值