我使用Angular 2的http服务获取一些数据,API返回' n'结果数量,但我只想处理' x'量。
考虑到我无法访问API的端点(为了创建限制或查找一种方法),我试图找出处理数量的最佳方法结果将返回到调用我的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]);
}
}
它有效(这并不一定意味着它确实没问题)......但是,我知道必须有更好的方法才能返回,例如,前两个响应对象中数据数组中的对象。或者前三个,或者四个......或者我想要的多少。
我读过" take"方法,但我不相信它在这种情况下实际上会起作用......
这是我订阅它并使用我的组件中的服务的地方:
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&#39; s * ngFor迭代这两个对象。
任何帮助将不胜感激! 提前谢谢!
答案 0 :(得分:5)
您可以在数据数组中使用slice
方法。
loadLatest() {
return this._http.get(URL)
.map(res => res.json())
.map(({data}) => data.slice(0,2));
}