Tips

Serviceを作る|AngularでWebサイト作成
2017.09.28

Serviceを作る|AngularでWebサイト作成

Serviceを作る|AngularでWebサイト作成

Angularの学習の為に、AngularでWebサイトを作ってみることにしました(Angularのバージョンは4.3.6です)。
適宜作業内容をまとめていきます。

基本的な部分は公式チュートリアルなどを参考にしながら進めています。

今回はコンポーネントに表示するデータをWebAPIからとってくる(または登録する)処理を記述するServiceを作っていきます。

開発環境

・OS:Windows8.1 64bit
・node:v7.2.1
・npm:4.0.5
・Angular:4.3.6
・開発ツール:VisualStudioCode

手順

手順1.Beanクラスの作成

Beanという言い方はあまりしないようですが分かりやすいので。
今回はUser属性を格納するオブジェクトにしたいので、以下の様にuser.tsを作成します。

1
2
3
4
export class User {
    id:number
    name:string
}

手順2.Serviceの作成

以下の様なuser.service.tsを作成します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import { Injectable } from '@angular/core';
import { User } from './user'; //←手順1で作成したUserをimportしておく。
import { Observable } from 'rxjs/Observable';
import { Headers, Http, Response } from '@angular/http';
import 'rxjs/add/operator/toPromise';
 
@Injectable() //←DIを可能にします。
export class UserService {
 
    private url = 'users'; //←リクエストするURL。適宜変更。
    private headers: Headers = new Headers({
        'Content-Type': 'application/json', //←HTTPHeader情報。色々追加可能。
    });
 
    constructor(private http: Http) { } //←コンストラクタ
 
    //User一覧取得メソッド
    getUsers(): Promise<User[]> {
        return this.http.get(this.url,{ headers: this.headers }).toPromise()
        .then((response: Response) => response.json().data as User[])
        .catch(this.handleError);
    }
    //User詳細取得メソッド
    getUser(id: number): Promise<User> {
        const url: string = `${this.url}/${id}`;
        return this.http.get(url,{ headers: this.headers }).toPromise()
        .then((response: Response) => response.json().data as User)
        .catch(this.handleError);
    }
    //User更新メソッド
    update(user: User): Promise<User> {
        const url: string = `${this.url}/${user.id}`;
        return this.http
        .put(url, JSON.stringify(user), { headers: this.headers }).toPromise()
        .then(() => user)
        .catch(this.handleError);
    }
    //User追加メソッド
    create(name: string): Promise<User> {
        return this.http
        .post(this.url, JSON.stringify({ name: name }), { headers: this.headers }).toPromise()
        .then((response: Response) => response.json().data)
        .catch(this.handleError);
    }
    //User削除メソッド
    delete(id: number): Promise<void> {
        const url = `${this.url}/${id}`;
        return this.http.delete(url, { headers: this.headers }).toPromise()
        .then(() => null)
        .catch(this.handleError);
    }
    //エラーハンドリングメソッド
    private handleError(error: any): Promise<any> {
        console.error('Error occured : ', error);
        return Promise.reject(error.message || error);
    }
}

※各メソッドの動きは、以下の様な流れ。
・Httpオブジェクトのget,post,put,deleteメソッドを用いてAPIリクエスト。
・戻り値のObservableオブジェクトをtoPromiseでPromiseに変換。
・thenメソッドのクロージャで取得したresponseデータを返す。
・エラー発生時はhandleErrorメソッドを実行。

手順3.AppModuleにServiceを追加

importを行い、

1
import { UserService } from './user/user.service'; //←追加

providersに追加。

1
2
3
providers: [
    UserService, //←追加
],

感想

今回はService追加を行いました。
次回はこのサービスをコンポーネントから利用していきます。

WEBアプリケーション関連 人気連載リンク

基礎からPHPWEBアプリ解発を学ぶなら・・
PHP基礎 連載

より実践的なWEBアプリ開発講座!Bootstrap活用を学ぶなら・・
魁!小野の塾 連載

Recent News

Recent Tips

Tag Search