我正在使用 Angular 2 的 http 服务获取一些数据,API 返回“n”个结果,但我只想处理“x”个数量。
考虑到我无权访问 API 的端点(为了创建 limit 或 findOne kind of methods),我正在尝试找出处理将返回到组件的结果数量的最佳方法调用我的 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 的 *ngFor 迭代这两个对象。
任何帮助将不胜感激! 提前致谢!
最佳答案
您可以在数据数组中使用 slice
方法。
loadLatest() {
return this._http.get(URL)
.map(res => res.json())
.map(({data}) => data.slice(0,2));
}
关于arrays - RxJS 限制和返回响应结果数组的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40793792/