2017-01-28 5 views
0

Не уверен, что титул является точным, так как он не уверен в точной терминологии.Угловой 2, наблюдаемый к наблюдаемому []

Предположим, у меня есть код, как показано ниже.

Когда я загружаю отдельный ресурс с использованием первого метода, я могу создать экземпляр богатого класса модели, который обертывает/украшает простой объект JS в функции, переданной в map (...).

Как я могу достичь же во втором способе, когда ответ является массивом объектов курса?

@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); 
    }); 
    } 
} 

ответ

2

Поскольку второй метод принимает массив, вы можете использовать Array.map() для итерации по значениям массива и преобразовать каждое значение в Course Например:

public getAllCourses(): Observable<any> { 
    return this.restangular.all("courses").getList().map(response => { 
    return response.map(courseData => new Course(courseData)); 
    }); 
} 

Этот код может быть запутанным, потому что:

Для краткости, вы могли бы написать тело метода на одной линии (избегая, таким образом внутреннюю return):

public getAllCourses(): Observable<any> { 
    return this.restangular.all("courses").getList().map(response => response.map(courseData => new Course(courseData))); 
} 

Но это немного труднее читать. :)

+0

Это отлично! –

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; 
    }); 
    } 
} 

Соответствует ли это вашей проблеме?

-1

Вы можете просто сделать это с

public getAllCourses(): Observable<Course[]> { 
    return this.restangular.all("courses").getList().map((resp: Response) => resp.json()); 
} 
Смежные вопросы