如何在 Angular 中更新 Observable 中的数据? rxjs

How to update data in Observable in Angular? rxjs

我正在努力学习 Angular 和 Typescript。 现在,我想这样做:

  1. 从网络获取用户列表api
public list$:Observable<{id:string,name:string,like:number}[]> = new Observable()

ngOnInit(): void {
   this.getData()
}

getData(){
   this.list$ = this.service.getUserList()
}
  1. 呈现用户列表
<ul>
  <li *ngFor="let item of list$ | async">
    <input (ngModelChange) = "changeName($event,item.id)">
    ....
  </li>
</ul>
  1. 通过id更改用户名
  async changeName(newName:string,id:string){
    const res = await this.service.changeName(newName,id).toPromise()
    if(res.success){
       // How to update this.list$ , without send a new request     
       // just like this:
       // this.userList = this.userList.map(i=>i.id === id ? { ...i, name:newName } : i)
    }
  }
  1. 这是可以做到的吗?

  2. 如果是,这是应该做的事情,还是有更好的方法来完成我想做的事情?

    认为!!!!

更改代码以将 item 发送到 changeName 方法,并在 API 更新响应成功后修改 changeName 方法中的 item.name=newName。当我们传递项目的引用时,我们应该看到正确更新的名称。

<ul>
  <li *ngFor="let item of list$ | async">
    <input (ngModelChange) = "changeName($event,item)">
    ....
  </li>
</ul>

和脚本

async changeName(newName:string,item:any){
    const res = await this.service.changeName(newName, item.id).toPromise()
    if(res.success){
       item.name=newName;
    }
  }

虽然解决方案有效。我认为这不是推荐的方法。

原因是,您正在手动更新数据 - 将要更新的视图的名称设置为 signal/notify。

使用 Observer/Observable - 响应式编程,我们希望视图在数据更改时自动更新。

这个问题的解决方案是使用 Subject,每次您更改某些内容时,Subject 都会将该更改推送给它的订阅者