Я пытаюсь обновить приложение с Angular 5 до Angular 6 и не могу понять, как использовать новый синтаксис RxJS. Вот код, который я пытаюсь перенести:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
@Injectable()
export class SearchService {
constructor(private http: HttpClient) {}
getAll() {
return this.http.get('assets/data/people.json');
}
search(q: string): Observable<any> {
if (!q || q === '*') {
q = '';
} else {
q = q.toLowerCase();
}
return this.getAll().map((data: any) => {
const results: any = [];
data.map(item => {
// check for item in localStorage
if (localStorage['person' + item.id]) {
item = JSON.parse(localStorage['person' + item.id]);
}
if (JSON.stringify(item).toLowerCase().includes(q)) {
results.push(item);
}
});
return results;
});
}
get(id: number) {
return this.getAll().map((all: any) => {
if (localStorage['person' + id]) {
return JSON.parse(localStorage['person' + id]);
}
return all.find(e => e.id === id);
});
}
save(person: Person) {
localStorage['person' + person.id] = JSON.stringify(person);
}
}
Я знаю, что импорт должен измениться на:
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
И теперь вы должны использовать pipe()
вместо map()
, но у меня проблемы с выяснением как. Было бы замечательно, если бы это было так просто, как показано ниже, но, похоже, это не так.
return this.getAll().pipe(
map(data: any) => {
const results: any = [];
data.map(item => {
// check for item in localStorage
if (localStorage['person' + item.id]) {
item = JSON.parse(localStorage['person' + item.id]);
}
if (JSON.stringify(item).toLowerCase().includes(q)) {
results.push(item);
}
});
return results;
}));