我正在尝试从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
}
如何解决范围问题?
答案 0 :(得分:1)
您将要更新服务deltaHistory
以返回最后给定的结果。您可以通过使用rxjs中的shareReplay
运算符来做到这一点:
deltasHistory = this.socket.fromEvent<any[]>('deltasHistory').pipe(
shareReplay(1)
);
现在,在最后一次发出之后进行的所有订阅都将获得最后一次发出的值