我使用WP Rest API使用Angular 2访问我的Wordpress数据库。我使用他们的post API并返回一个我映射的json对象来创建一个对象。
对象:
export class BlogPost {
date: Date;
id: number;
link: string;
title: string;
author: number;
excerpt: string;
featuredMediaURL: string;
featuredMediaID: number;
categories: string[];
tags: string[];
constructor(obj?: any) {
this.date = obj && obj.date || null;
this.id = obj && obj.id || null;
this.link = obj && obj.link || null;
this.title = obj && obj.title || null;
this.author = obj && obj.author || null;
this.excerpt = obj && obj.excerpt || null;
this.featuredMediaURL = obj && obj.featuredMediaURL || null;
this.featuredMediaID = obj && obj.featuredMediaID || null;
this.categories = obj && obj.categories || null;
this.tags = obj && obj.tags || null;
}
}
服务:
export class BlogService {
constructor(public http: Http,
@Inject(DOMAIN) private domain: string) { }
getPost(): Observable<BlogPost[]> {
return this.http.get(`${this.domain}/wp-json/wp/v2/posts/?page=1`)
.map((response: Response) => {
return (<any>response.json()).map(item => {
return new BlogPost({
date: item.date,
id: item.id,
link: item.link,
title: item.title,
author: item.author,
excerpt: item.excerpt,
featuredMediaID: item.featured_media,
categories: item.categories,
tags: item.tags
});
});
});
}
我的问题是,对于某些属性(如媒体),API会返回媒体的ID而不是网址。我能够通过创建一个单独的服务来混合和匹配并将url放入模板中,该服务返回存储在数据库中的所有媒体,然后比较两个数组之间的id号并返回正确的:
mediaURL(id: number): string {
for (let med of this.media) {
if(med.id === id) {
return med.url;
};
};
return 'error';
}
但这有点乏味。我想知道是否有一个干净的rxjs方法来发布
this.http.get(`${this._domain}/wp-json/wp/v2/media/<id>`)
在将整个帖子数组返回给博客组件之前,将其映射到BlogPost.featuredMediaURL。
我已经搞砸了一天尝试了几件事,我不知所措。