Max*_*ket 3 observable rxjs angular rxjs-pipeable-operators
尝试对返回的 Observable.subscribe() 数据的数组进行排序...这是 Angular 7 的新功能。我对如何在此处使用 RXJS 方法、我需要在哪里导入什么以及如何对 Event 类型的数组进行排序感到困惑。
事件.ts
import {Venue} from './Venue';
export class Event {
id: number;
url: string;
date: string;
venue_id: number;
venue: Venue;
}
Run Code Online (Sandbox Code Playgroud)
事件结果对象.ts
import {Event} from './Event';
export interface EventResultObj {
count: number;
next?: any;
previous?: any;
results: Event[];
}
Run Code Online (Sandbox Code Playgroud)
事件服务.ts:
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Event } from '../models/Event';
import {Observable} from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class EventsService {
eventsUrl = 'http://localhost:4200/assets/tempData/events.json';
constructor( private http: HttpClient) { }
getEvents(): Observable<EventResultObj> {
return this.http.get<EventResultObj>(this.eventsUrl).pipe(
/// CANNOT FIGURE OUT HOW TO GET A SORT FUNCTION TO WORK HERE
/// WITH THE OBSERVABLE
)
}
}
Run Code Online (Sandbox Code Playgroud)
事件列表.ts
import {Component, OnInit} from '@angular/core';
import {EventsService} from '../../services/events.service';
@Component({
selector: 'app-buyer-events-list',
templateUrl: './buyer-events-list.component.html',
styleUrls: ['./buyer-events-list.component.scss']
})
export class BuyerEventsListComponent implements OnInit {
constructor(private eventsService: EventsService) {
}
events;
ngOnInit() {
this.eventsService.getEvents().subscribe(events => this.events = events); // OR DO I ADD A PIPE OR MAP HERE AND HOW DO I DO IT?
}
}
Run Code Online (Sandbox Code Playgroud)
您需要在服务中对其进行排序并在组件中订阅,因此您的服务将具有类似的内容,
getEvents(): Observable<Event[]> {
return this.http.get<Event[]>(this.eventsUrl).pipe(
map(events => events.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()))
) ;
}
Run Code Online (Sandbox Code Playgroud)
进而,
ngOnInit() {
this.eventsService.getEvents().subscribe(events => this.events = events);
}
Run Code Online (Sandbox Code Playgroud)
我会添加一个map直接在您服务的函数中对事件进行排序的方法getEvents。这样,使用该服务的每个类都将获得已排序事件的可观察值:
import { map } from 'rxjs/operators';
getEvents(): Observable<Event[]> {
return this.http.get<Event[]>(this.eventsUrl).pipe(
map(events => events.sort((a: Event, b: Event) =>
(new Date(a.date)).getTime() - (new Date(b.date)).getTime()
))
);
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10607 次 |
| 最近记录: |