Angular2のQuickStartをさっとやってみた。
Download | Node.jsからLTSのNode.jsをダウンロードします。自分はUbuntu16.04で動かすために、node-v6.9.4-linux-x64.tar.xz をダウンロードして ${HOME}/app/node-v6.9.4-linux-x64 へ展開しました。.
下記を ${HOME}/.profile へ追加して、ログインしなおすと、nodeコマンドが使えるようになります。
PATH="$HOME/app/node-v6.9.4-linux-x64/bin:$PATH" export PATH
Setup for local development – ts – GUIDEにあるコマンドを打てば、もうそれでAngular2アプリが動きます。簡単。最初にプロジェクト用のディレクトリ作成と、gitコマンドのインストールのコマンドを追加しています。
mkdir -p workspace/angular2 cd workspace/angular2 sudo apt -y install git git clone https://github.com/angular/quickstart.git quickstart cd quickstart npm install npm start
ただし、npm install のあとに、TypeScriptは2.1を使いたかったので、package.json でtypescriptのバージョンは書き換えました。
"typescript": "~2.1.0",
npm start をすると、自動でWebブラウザが起動して、 http://localhost:3000/が動きます。
Webサーバーと連携させてみます。CORS対応のサーバーが必要なので、Python3で用意してweb.pyとします。ディレクトリは workspace/angular2/webpyを作って、そこにしておけばいいでしょう。
#!/bin/python from http.server import HTTPServer, SimpleHTTPRequestHandler, test import sys class CORSRequestHandler (SimpleHTTPRequestHandler): def end_headers (self): self.send_header('Access-Control-Allow-Origin', '*') SimpleHTTPRequestHandler.end_headers(self) if __name__ == '__main__': test(CORSRequestHandler, HTTPServer, port=8000)
web.pyと同じディレクトリへname.jsonファイルも用意しておきます。
{ "name":"Angular2 JSON" }
起動します。
$ python3 web.py
これで、http://localhost:8000/name.json で取得できます。
Angular2の src/app/app.module.ts は次のようにします。
import { NgModule } from '@angular/core'; import { HttpModule } from '@angular/http'; import { BrowserModule } from '@angular/platform-browser'; import { AppComponent } from './app.component'; import { NameService } from './name.service'; @NgModule({ imports: [ BrowserModule, HttpModule ], declarations: [ AppComponent ], providers: [ NameService ], bootstrap: [ AppComponent ] }) export class AppModule { }
src/app/app.component.ts は次のようにします。
import { Component, OnInit } from '@angular/core'; import { Response } from '@angular/http'; import { Observable } from 'rxjs/Observable'; import 'rxjs/add/operator/toPromise'; import 'rxjs/add/operator/map' import { NameService } from './name.service'; @Component({ selector: 'my-app', template: `<h1>Hello {{name}}</h1>`, }) export class AppComponent implements OnInit { name = 'Angular'; constructor (private nameService: NameService) {} ngOnInit():void { this.nameService.get().map( (res: Response) => this.name = res.json().name as string ).toPromise(); } }
src/app/name.service.tsを追加します。
import { Injectable } from '@angular/core'; import { Http, Response } from '@angular/http'; import { Observable } from 'rxjs/Observable'; @Injectable() export class NameService { private link = 'http://localhost:8000/name.json'; constructor (private http: Http) {} get(): Observable<Response> { return this.http.get(this.link); } }
広告: