【发布时间】:2018-12-03 14:54:29
【问题描述】:
我正在通过 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 不返回任何内容/null
我检查了 100 倍,我的 url 变量确实与 JSON 文件中的一项的 link 字符串匹配。
从我的 ./page.ts 文件中:
export interface Page {
id: number,
link: string
}
编辑:
这段代码刚刚产生了我正在寻找的结果。但是,我不明白为什么从 Observable 中删除 <Page> 会有所不同。如果有人可以向我解释这一点,将不胜感激!
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;
}
【问题讨论】: