【发布时间】:2017-04-09 04:39:07
【问题描述】:
我正在使用 Angular 2 的 http 服务获取一些数据,API 返回 'n' 个结果,但我只想处理 'x' 个数量。
考虑到我无权访问 API 的端点(为了创建 limit 或 findOne 类方法),我正在尝试找出处理将返回到组件的结果数量的最佳方法调用我的 HomeService 的“loadLatest”方法。
在这个特定的例子中,响应是一个看起来像这样的对象:
{
success: true,
data: [Object, Object, Object],
user: 'testUser'
}
我只对数据数组感兴趣(比如说,只获取它包含的前两个对象)。
如果我想得到一个结果,我可以这样做:
import { Http, Headers } from '@angular/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
const URL = 'http://exampleapi.com/example';
@Injectable()
export class HomeService {
constructor(private _http: Http){}
loadLatest() {
return this._http.get(URL)
.map(res => res.json())
.map(({data}) => data[0]);
}
}
而且它有效(这并不一定意味着它实际上没问题)......但是,我知道必须有更好的方法来返回,例如,返回响应对象中数据数组中的前两个对象。或者前三个,或者前四个......或者我想要多少。
我阅读了有关“采取”方法的信息,但我不相信它在这种情况下实际上会起作用...
这是我订阅它并在我的组件中使用该服务的地方:
import { Component, OnInit } from '@angular/core';
import { HomeService } from './home.service';
import { Observable } from 'rxjs/Observable';
@Component({
selector: 'home',
templateUrl: './home.html'
})
export class HomeComponent implements OnInit {
// I used this typing because I originally only wanted a single item
// This might have to change
items: Observable<Object>
constructor(private homeService: HomeService){}
ngOnInit() {
this.homeService.loadLatest()
.subscribe(result => this.items = result);
}
}
如您所见,我希望结果是一个包含两个对象的数组,我将它们分配给 this.items,以便我可以使用 Angular 的 *ngFor 迭代这两个对象。
任何帮助将不胜感激! 提前致谢!
【问题讨论】:
-
也许反对我的问题的人想详细说明他/她为什么这样做......不确定我的问题是否以正确的方式出现。我真的想知道是否有特定的反应方法可以完成上述操作,正如我对 Puigcerber 的回答所评论的那样,我还想知道带有 slice 方法的 map 方法是否是最永久的方法。但是对合法问题没有任何解释的否决票......真的吗?
标签: arrays http angular rxjs reactive-programming