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を作成します。
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追加を行いました。
次回はこのサービスをコンポーネントから利用していきます。
WEBアプリケーション関連 人気連載リンク
基礎からPHPWEBアプリ解発を学ぶなら・・
PHP基礎 連載
より実践的なWEBアプリ開発講座!Bootstrap活用を学ぶなら・・
魁!小野の塾 連載