2017-01-28 59 views
0

正確な用語がわからないため、タイトルが正確かどうかは不明です。角度2観察可能な[]

次のようなコードがあるとします。

最初のメソッドを使用して個々のリソースを読み込むと、map(...)に渡された関数でプレーンなJSオブジェクトをラップ/デコレートするリッチモデルクラスのインスタンスを作成できます。

レスポンスがCourseオブジェクトの配列である2番目の方法で同じ結果を得るにはどうすればよいですか?

@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

でそれをやってすることができ、あなたは、配列の値を反復処理し、Courseインスタンスに各値を変換するためにArray.map()を使用することができます。

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

このコードは、混乱することができますので:

  • 第一.map()Observable.map()(RxJSライブラリから)です。
  • 第2 .map()Array.map()(プレーンJavaScript)です。

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

    をしかし、それは読んで少し難しいです:

簡潔にするために、あなたは(したがって、内側returnを避ける)単一の行にメソッド本体を書くことができます。 :)

+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

第2の方法は、配列を受け取るので、あなたは、単に

public getAllCourses(): Observable<Course[]> { 
    return this.restangular.all("courses").getList().map((resp: Response) => resp.json()); 
} 
関連する問題