かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

AngularJSとTypeScript「Directiveのハローワールド」

AngularJSのかなり強力なディレクティブという機能のハローワールドしてみました。こいつAngularJSでDOM操作する処理をカプセル化する素敵なやつです。とりあえず、JavaScriptではなくてTypeScriptでは、どういう風にかくのかというのをつかむために、Hello worldを書いてみようと思います。

JSでのディレクティブとかについては、以下のサイトがとても参考になります。

ディレクティブの作り方

ディレクティブが持つべきプロパティを定義したng.IDirectiveインターフェースを実装します。linkとかが型指定で定義されているので、まぁ割と安心ですね。たとえば、こていの テンプレートを流し込むだけのデイxれくてぃぶなら以下のように定義できます。

/// <reference path="scripts/typings/angularjs/angular.d.ts" />

module TypeScriptAngularJSApp1 {
    // Hello worldと挿入するだけのディレクティブ
    class HelloWorldDirective implements ng.IDirective {
        template = "<p>Hello world</p>";
        replace = true;
    }

    // okazuki-HelloWorldで指定できるように登録する。
    // 第二引数は、ラムダ式で、先ほど作ったクラスをnewして返す。
    angular.module("myApp", [])
        .directive("okazukiHelloWorld", () => new HelloWorldDirective());
}

あとは、HTMLで使うだけです。何もないdivタグにokazuki-hello-worldを追加しています。

<!DOCTYPE html>

<html lang="ja" ng-app="myApp">
<head>
    <meta charset="utf-8" />
    <title>TypeScript HTML App</title>
    <link rel="stylesheet" href="app.css" type="text/css" />
    <script src="Scripts/angular.min.js"></script>
    <script src="app.js"></script>
</head>
<body>
    <div okazuki-hello-world></div>
</body>
</html>

実行すると、ちゃんとディレクティブが動いていることがわかります。

f:id:okazuki:20140601143056p:plain