Я загружаю набор данных внешней страницы через файл JSON. Оставленный в покое, мой Observable возвращает 4 объекта, как и ожидалось:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { Page } from './page';
import { filter } from 'rxjs/operators';
pagesUrl = 'http://localhost:4200/assets/pages.json';
constructor(private http: HttpClient) { }
getPage(slug): Observable<Page> {
var pages = this.http.get<Page>(this.pagesUrl);
return pages;
}
pages
предоставляет моему компоненту все данные для 4 страниц.
Однако, когда я пытаюсь отфильтровать pages
к элементу с определенным URL, я ничего не получаю:
getPage(slug): Observable<Page> {
var url = this.site + slug + "/";
var pages = this.http.get<Page>(this.pagesUrl);
const data = pages.pipe(
filter(page => page.link == url)
);
const subscribe = pages.subscribe(p => console.log(p));
return data;
}
data
ничего не возвращает / ноль
Я проверил 100x, мой url
var действительно соответствует строке link
для одного из элементов в файле JSON.
и из моего файла ./page.ts:
export interface Page {
id: number,
link: string
}
Edit:
Этот код только что дал результат, который я искал. Однако я не понимаю, почему удаление <Page>
из Observable сделало иначе. Если кто-то сможет мне это объяснить, это будет очень ценно!
getPage(slug): Observable<any> {
var url = this.site + slug + "/";
var pages = this.http.get<any>(this.pagesUrl);
const data = pages.pipe(
map(pages => pages.filter((page) => page.link == url))
);
const subscribe = pages.subscribe(p => console.log(p));
return data;
}