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を作成します。

export class User {
    id:number
    name:string
}

手順2.Serviceの作成

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

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を行い、

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

providersに追加。

providers: [
    UserService, //←追加
],

感想

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

  • このエントリーをはてなブックマークに追加

PAGE TOP