Scala.jsに入門したのでangularを使い、簡単なTODOアプリを書いてみた。
angularのコントローラー
todos変数をhtmlでng-repeatしてて、todoServiceでajax通信しデータ取得してる。
class TodoCtrl($location: Location, todoService: TodoService) extends Controller {
var todos = js.Array[Todo]()
def list() = {
todoService.list().onSuccess { case j =>
todos = j.items.toJSArray
}
}
TypeScriptで書いてたのと似てる。
Todoのcase classがサーバー側と共通で使えるので良い。
他はリポジトリのコード読んでください。
良かったところ
- ほんと普通にScalaでjsが書ける。
- case classがサーバー側と共通で使えて良い。
- ライブラリが対応してればjs側でも同じく使える。
- ファイルサイズ意外と小さい?。minifyするfullOptJsで288KB。
悪かったところ
- コンパイル時間が(ry
- たまにcleanしないと上手くjsが生成されないことがある。
- 生成されたjs、読む気になれん。
- HttpPromiseからFutureに変換してonCompleteするとTodoCtrlのtodosの更新が検知されなくなってよく分からんかった。
まとめ
angular+scala.jsは、上手く動かないと聞いていたが今は大丈夫なよう。
ImmutableJSとか使う必要なく、Scalaのメソッドで書けるので良い...。パターンマッチがjsで使えるの良い...。
Scala.js良いね。