从Angular HTTP get API调用排序数据

Dea*_*alk 4 rxjs angular

看来这应该是一件微不足道的事情,但是我真的在努力为一个简单的问题制定出一种简洁的非hacky解决方案。

http.get(...对服务的Angular调用返回了一个Observable-它是T项的流(在我用映射之后response.json()

Observable是我组件上的一个属性。我<select>在组件模板中有一个元素,而这些<option>元素是通过*ngFor="let item of myObservable | async"模板中的代码创建的。

这创建了一个不错的select元素,它具有所有期望在浏览器中很好显示的值:)

现在有人要求我按字母顺序对select语句中的选项进行排序。

我不想创建一个排序管道,因为Angular团队建议不要这样做,而且Observables本质上是无法排序的。

香港专业教育学院试图将Observable转换为简单的结果数组-但这似乎也是不可能的。

那么,如何实现这一简单目标呢?我的JSON服务返回20个左右的JSON对象,而我似乎无法弄清楚如何按它们的属性之一对它们进行排序。

谢谢你的帮助。

Dea*_*alk 5

好的,我已经解决了(如果有人感兴趣的话;

我从服务获得的原始代码是这样的:

  public getAllItems(): Rx.Observable<DataItem> {
    var returnVar = this.http.get("http://localhost:8090/api/rest/dataitem")
      .map(res => {
        return res.json()
      });
    return returnVar;
Run Code Online (Sandbox Code Playgroud)

但后来我将可观察对象更改为可观察对象类型数组,并在地图中对其进行了排序

public getAllItems(): Rx.Observable<DataItem[]> {
    var returnVar = this.http.get("http://localhost:8090/api/rest/dataitem")
      .map(res => {
          var ret = <DataItem[]>res.json();
          ret.sort((a,b) => a.name < b.name ? -1 : 1);
          return ret;
      } );
Run Code Online (Sandbox Code Playgroud)

我没有意识到您可以将响应对象转换为单个项目或整个数组。

感谢所有尝试提供帮助的人。