<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 1. Load libraries -->
<!-- IE required polyfills, in this exact order -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/es6-shim/0.33.3/es6-shim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.16/system-polyfills.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.3/angular2-polyfills.js"></script>
<script src="https://code.angularjs.org/tools/system.js"></script>
<script src="https://code.angularjs.org/tools/typescript.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.3/Rx.js"></script>
<script src="https://code.angularjs.org/2.0.0-beta.3/angular2.dev.js"></script>
<!-- 2. Configure SystemJS -->
<script>
System.config({
transpiler: 'typescript',
typescriptOptions: { emitDecoratorMetadata: true },
packages: {'app': {defaultExtension: 'ts'}}
});
System.import('app/boot')
.then(null, console.error.bind(console));
</script>
</head>
<!-- 3. Display the application -->
<body>
<my-app>Loading...</my-app>
</body>
</html>
import {bootstrap} from 'angular2/platform/browser'
import {Component} from "angular2/core";
import {ViewChild} from "angular2/core";
import {AfterViewInit} from "angular2/core";
@Component({
selector: `my-app`,
template: `
<div>
<canvas #myCanvas width="400" height="400" style="background:lightgray;"></canvas>
<div>
幅 <input type="range" min="1" max="400" [(ngModel)]="rectW" /><br />
高さ <input type="range" min="1" max="400" [(ngModel)]="rectH" /><br />
塗りの色 <input type="color" [(ngModel)]="rectColor" placeholder="color" value="{{rectColor}}" />
</div>
</div>
`
})
export class AppComponent implements AfterViewInit {
rectW:number = 100;
rectH:number = 100;
rectColor:string = "#FF0000";
context:CanvasRenderingContext2D;
@ViewChild("myCanvas") myCanvas;
ngAfterViewInit() {
// 参照をとれる
let canvas = this.myCanvas.nativeElement;
this.context = canvas.getContext("2d");
this.tick();
}
tick() {
// 本当はデータ変更時のみ呼び出したい
requestAnimationFrame(()=> {
this.tick()
});
var ctx = this.context;
ctx.clearRect(0, 0, 400, 400);
ctx.fillStyle = this.rectColor;
ctx.fillRect(0, 0, this.rectW, this.rectH);
}
}
bootstrap(AppComponent, []);