代码之家  ›  专栏  ›  技术社区  ›  Sean

从订阅对象分配多个值

  •  0
  • Sean  · 技术社区  · 6 年前

    我有一个有两个简单数字的对象,然后是一个对象列表:

    export class Lineup {
      players: Player[];
      fantasypoints: number;
      salary: number;
    
      constructor(values: Object = {}) {
        Object.assign(this, values);
      }
    }
    

    我点击了一个服务来填充一个帖子(我添加了一些玩家并从中得到了一个阵容:

    public postLineup(players): Observable < Lineup > {
      return this.http.post <Lineup>(`${API_URL}/optimize`, JSON.stringify(players));
    }
    

    这篇文章返回的数据很好,据我所知,它将正确地将JSON填充到Lineup对象中。

    onClickOptimize() {
      this.apiService.postLineup(this.playerSource.data)
        .subscribe(lineupreturned => {
          this.lineupSource = new MatTableDataSource(lineupreturned.players);
          this.salary = lineupreturned.salary;
          this.fantasypoints = lineupreturned.fantasypoints;
          this.displaylineup = true;
          console.log("component output:"), console.log(lineupreturned);
        });
    }
    

    这个 console.log 属于 lineupreturned 实际上显示了一个对象并填充了它。但是,如果你要记录 this.salary undefined . 我一辈子都不明白为什么这些变量都没有被填充。

    null: Array(1) [Object]
    length: 1
    __proto__: Array(0) [, …]
    0: Object {fantasypoints: 324.15, players: Array(8), salary: 48800}
    fantasypoints: 324.15
    players: Array(8) [Object, Object, Object, …]
    length: 8
    __proto__: Array(0) [, …]
    0: Object {_max_exposure: null, _projected_ownership: null, first_name: "Ray", …}
    1: Object {_max_exposure: null, _projected_ownership: null, first_name: "Clearlove", …}
    2: Object {_max_exposure: null, _projected_ownership: null, first_name: "Scout", …}
    3: Object {_max_exposure: null, _projected_ownership: null, first_name: "Hope", …}
    4: Object {_max_exposure: null, _projected_ownership: null, first_name: "Meiko", …}
    5: Object {_max_exposure: null, _projected_ownership: null, first_name: "SnowFlower", …}
    6: Object {_max_exposure: null, _projected_ownership: null, first_name: "Arce", …}
    7: Object {_max_exposure: null, _projected_ownership: null, first_name: "Infinity eSports", …}
    salary: 48800
    __proto__: Object {constructor: , __defineGetter__: , __defineSetter__: , …}
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Community CDub    5 年前

    我注意到几个问题:

    JSON.stringify(players) 其实并不需要。

    public postLineup(players): Observable < Lineup > {
      return this.http.post <Lineup>(`${API_URL}/optimize`, JSON.stringify(players));
    }
    

    所以这应该是:

    public postLineup(players): Observable < Lineup > {
      return this.http.post <Lineup>(`${API_URL}/optimize`, players);
    }
    

    onClickOptimize() {
      this.apiService.postLineup(this.playerSource.data)
        .subscribe(lineupreturned => {
          const actualResponse = lineupreturned[0];
          this.lineupSource = new MatTableDataSource(actualResponse.players);
          this.salary = actualResponse.salary;
          this.fantasypoints = actualResponse.fantasypoints;
          this.displaylineup = true;
          console.log("component output:"), console.log(lineupreturned);
        });
    }
    

    给,你用的是 new MatTableDataSource(lineupreturned.players) 可能会引发一个错误。

    所以您可能需要在那里放置一个断点来查看 lineupreturned 并检查控制台上是否有任何错误。

    更新

    console.log 输出,看起来实际响应是一个数组,其中只有一个对象。此对象将包含以下内容 fantasypoints , players ,和 salary .

    所以在我更新后更改订阅代码。

    推荐文章