如何在* ngFor循环之前调用函数? :: Angular2

时间:2016-12-14 11:53:33

标签: javascript arrays sorting angular typescript

首先,我有一个http请求,如下所示:

private getValues() {
  this._watchlistElements.map(v =>
    this.http.get('http://localhost:8080/getValue/' + v.xid)
    .subscribe(res => {
      this._values.push(res.json());
    }));
};

一切都很好,但问题是它返回一个混乱的,未排序的对象数组。我想对它进行排序,这就是为什么我做了一个单独的排序功能:

private sortPoints(){
  this._values.sort((a,b) => a.ts - b.ts);
}

来自_values变量的元素由*ngFor循环显示:

<tr *ngFor="let elem of _values">

在一个间隔中每隔5秒调用getValues()函数:

this.loadPoints = setInterval(() => {
  this.getValues();
}, 5000);

现在我必须调用排序函数 - sortPoints() - 某处。我觉得这样很好:

this.loadPoints = setInterval(() => {
  this.getValues();
  this.sortPoints();
}, 5000);

但不幸的是它不会影响阵列。 *ngFor循环只是用未排序的元素填充表。但如果我只做一个简单的按钮:

<button (click)="sortPoints()">Sort it!</button>

在按钮单击后立即动态排序数组。

那么我的问题是,如果您有任何其他想法来放置函数以使此机制有效?

任何帮助都非常感谢。

  

编辑实施@Sasxa解决方案,收到以下错误:

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以链接可观察的运算符并处理流,因此最后(当您订阅时)您可以根据需要获得值:

private getValues() {
  this._watchlistElements.map(v =>
    this.http.get('http://localhost:8080/getValue/' + v.xid)
      .map(res => res.json())
      .map(data => this._values.push(data))
      .map(() => this._values.sort((a,b) => a.ts - b.ts))
      .subscribe(sorted => this._values = sorted));
};