【问题标题】:Update Items in Observable Array with RxJS使用 RxJS 更新 Observable 数组中的项目
【发布时间】:2021-05-19 10:35:12
【问题描述】:

我已经实现了一个 Angular 应用程序,它请求一个项目列表来填充表格。 在我的服务中,我有以下函数从服务器请求项目列表:

requestPostingList(): Observable<Posting[]> 

在视图中,表订阅了这个 Observable。

依赖于 Posting-Model 中的状态变量我想轮询服务器以获取更改并更新 Posting[] 中的一些(不是全部)项目。 出于这个原因,我的服务类中有这个功能:

pollPostingState(postingId: string): Observable<Posting>

它每 2 秒在服务器上轮询一次,如果状态变量发生变化,它会发出一个新的发布对象。

我需要某种“合并机制”来更新 Posting[] 的项目。这必须异步完成,所以我不想等待所有民意调查完成。每次轮询请求完成时,我都希望在 UI 中,相应的行会更改/更新。 所以我需要发出一个更新的 Posting[]....

如何使用 RXJS 实现这一点?

提前致谢

编辑: 表如何获取数据:

public dataSource = new MatTableDataSource<Posting>([]);

public ngAfterViewInit(): void {
this.postingService.requestPostingList()
    .subscribe(data => this.dataSource.data = data);
}

在 HTML 中,我将 dataSource 绑定到 mat-table

【问题讨论】:

  • 您能发布表格如何将数据显示在屏幕上吗?
  • 添加了此信息...
  • 你怎么打电话给pollPostingState?每个Posting 都需要这样做吗?
  • 类似myService.pollPostingState(postingId).subscribe(posting =&gt; /* find the posting in this.dataSource.data and update it */)。与mat-table 的绑定将进行重新渲染

标签: angular rxjs observable


【解决方案1】:

我不知道您的应用程序是如何定义的。但是您可以将pipemap 函数一起使用。可能是这样的:

myService.pollPostingState(id)
    .pipe(
        map( response : Posting ) => {
            updateArray(response)
            return response;
        }
    ).subscribe(...)

每次向pollPostingState 发出新请求并返回有效时,此更改都会触发updateArray()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2019-04-07
    相关资源
    最近更新 更多