不确定标题是否准确,因为不确定术语。
假设我有一些类似下面的代码。
当我使用第一种方法加载单个资源时,我可以创建一个富模型类的实例,它在传递给map(...)的函数中包装/修饰普通的JS对象。
如何在第二种方法中实现相同的方法,其中响应是一个Course对象数组?
@Injectable()
export class CourseService {
constructor(private restangular: Restangular) {
}
public getCourse(id: number): Observable<any> {
return this.restangular.one("courses", id).get().map(response =>
new Course(response)
);
}
public getAllCourses(): Observable<any> {
return this.restangular.all("courses").getList().map(response => {
//an array of courses
console.log(response);
});
}
}
答案 0 :(得分:2)
由于第二个方法接收数组,您可以使用Array.map()
迭代数组的值并将每个值转换为Course
实例:
public getAllCourses(): Observable<any> {
return this.restangular.all("courses").getList().map(response => {
return response.map(courseData => new Course(courseData));
});
}
此代码可能会引起混淆,因为:
.map()
是Observable.map()(来自RxJS库)。.map()
是Array.map()(纯JavaScript)。为简洁起见,您可以在一行上编写方法体(从而避免使用内部return
):
public getAllCourses(): Observable<any> {
return this.restangular.all("courses").getList().map(response => response.map(courseData => new Course(courseData)));
}
但是阅读起来有点困难。 :)
答案 1 :(得分:0)
您对此方法有何看法?
@Injectable()
export class CourseService {
constructor(private restangular: Restangular) {
}
public getCourse(id: number): Observable<any> {
return this.restangular.one("courses", id).get().map(response =>
new Course(response)
);
}
public getAllCourses(): Observable<any> {
return this.restangular.all("courses").getList().map(response => {
//an array of courses
let courses = [];
for (let courseData of response) {
courses.push(new Course(courseData);
}
return courses;
});
}
}
这适合您的问题吗?
答案 2 :(得分:-1)
您只需使用
即可public getAllCourses(): Observable<Course[]> {
return this.restangular.all("courses").getList().map((resp: Response) => resp.json());
}