Метод подписки RXJS не работает при вызове из HTML-страницы - PullRequest
1 голос
/ 23 апреля 2019

Я пытаюсь вызвать наблюдаемое со страницы 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 Ответ

1 голос
/ 23 апреля 2019

Вы хотите обновить свой сервис deltaHistory, чтобы вернуть последний заданный результат. Вы можете сделать это, используя оператор shareReplay из rxjs:

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

Теперь все подписки, сделанные после последнего выброса, получат последнее выданное значение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...