Angular 用Ag网格中的另一个可观测响应改变可观测响应

Angular 用Ag网格中的另一个可观测响应改变可观测响应,angular,typescript,rxjs,observable,ag-grid,Angular,Typescript,Rxjs,Observable,Ag Grid,我有一个可观察的,从服务器上得到所有盒子的东西。每个框都有一个属性(lastUpdateBy),我想将其从userservice更改为全名。问题是,Ag网格总是很快显示结果,然后数据就会改变。刷新网格后,数据将正确显示。你知道这里有什么问题吗?谢谢 getAllBox() { this.BoxesService.getAllBoxes().subscribe(responseData => { responseData.Boxes.map(item => {

我有一个可观察的,从服务器上得到所有盒子的东西。每个框都有一个属性(lastUpdateBy),我想将其从userservice更改为全名。问题是,Ag网格总是很快显示结果,然后数据就会改变。刷新网格后,数据将正确显示。你知道这里有什么问题吗?谢谢

getAllBox() {
    this.BoxesService.getAllBoxes().subscribe(responseData => {
      responseData.Boxes.map(item => {
        this.userService
          .getUserName(item.lastUpdatedBy)
          .subscribe(fullName => {
            item.lastUpdatedBy = fullName
          })
      })
      this.agGridData = responseData.boxes
    })
  }

如果不允许只进行一次WEB API调用,则可以检查数组中是否有其他项,如果数组中没有项,则只显示网格:

HTML:


您正在对
map
函数中的
responseData.box
的每个项进行API调用。可以吗?尝试在一次API调用中获取所有必要的信息。是的,没问题。您是否能够进行一次API调用以获取所有必要的信息?我建议您使用RxJS操作符,如mergemap,而不是嵌套订阅。下面是一个如何实现的示例()
<ag-grid-angular 
    *ngIf="showData"
    style="width: 500px; height: 500px;" 
    class="ag-theme-balham"
    [rowData]="yourRows" 
    [columnDefs]="yourColumns"
    >
</ag-grid-angular>
showData: Boolean = false;

getAllBox() {

    this.BoxesService.getAllBoxes().subscribe(responseData => {
        let boxMaxIndex = responseData.Boxes.length - 1;
        responseData.Boxes.map((item, index) => {
            this.userService
            .getUserName(item.lastUpdatedBy)
            .subscribe(fullName => {
              item.lastUpdatedBy = fullName
              if (boxMaxIndex === index)
                this.showData = true;
            })
        })
        this.agGridData = responseData.boxes
      })
}