blog

ウェブデザイナーがはじめる AngularJS シリーズウェブデザイナーがはじめるAngularJS:DOM操作系ディレクティブを試す

    • Ryuichi Nonaka
    この記事は書かれてから1年以上経過しており、内容が古い場合があります。

    はじめに

    AngularJSリファレンスを参考にDOM操作のサンプルを一通り作ってみた。ほとんどのサンプルは自分が理解し易いように改変してあります。やはり読むだけではなく、実際に手を動かした方が理解が早い。詳しい説明はAngularJSリファレンスをどうぞ。サンプルはcodepen.ioで作ったのでまとめて見たい方はこちら

    ngBind : 2-1-1

    ngBindはモデルをビューにバインディングするディレクティブ。サンプルの通り、いくつかの記法があるけれどJavaScriptがオフになっていることを考慮するのであればカスタム属性ng-bind="hoge"を使った方が良いのかもしれません。後者の記述方法でもngCloakを使うことで初期化前にバインディング用のタグが表示されてしまう問題は解決できます。

    <input type="text" ng-model="myName" placeholder="yourName">
    <p ng-bind="myName"></p>
    <p>{{ myName }}</p>
    

    API Reference: ngBind

    ngBindHtml : 2-1-2

    ngBindHtmlはHTMLタグなどの文字列を無害化して表示するディレクティブです。これを使うにはngSanitizeモジュールが必要になります。

    API Reference: ngBindHtml

    ngBindTemplate : 2-1-3

    ngBindTemplateはテンプレートを作成し複数の要素をBindすることができます。spanタグでバインド先を分けられないOptionタグなどで活用できます。

    API Reference: ngBindTemplate

    ngNonBindable : 2-1-4

    Bindさせたくない場合に指定するとngBindの部分がそのまま表示されます。どんなところで使うのか具体的にはイメージできてません。

    API Reference: ngNonBindable

    ngCloak : 2-1-5

    AngularJSの初期化処理が完了するまでngBindがそのまま表示されてしまう問題を解決します。CSSに特定の属性が適用されている場合display: none;を適用し、AngularJSの初期化が終了した段階でngCloak属性が削除され表示されるようになります。

    [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
      display: none !important;
    }
    

    API Reference: ngCloak

    ngStyle : 2-1-6

    ngStyleはStyle属性を動的に操作します。Styleの操作はできればClassで制御するのが適切かと思います。

    API Reference: ngStyle

    ngClass : 2-1-7

    ngClassは動的にClassを操作します。状態に合わせたスタイルの変更はこれを多用することになりそうですね。HashでClassをオン・オフできるのはかなり便利そうです。

    API Reference: ngClass

    ngClassEven / ngClassOdd : 2-1-8,9

    ngClassEvenはngRepeatと組み合わせて使い偶数行に対しての振る舞いを定義できます。ngClassOddは奇数業に対して振る舞いを定義します。テーブルの行を色分けしたりとか。

    ngShow / ngHide : 2-1-10,11

    ngShowは値の評価がtrueであれば内包する要素を表示します。ngHideは評価がtrueであれば要素を非表示にします。簡単に表示制御を行うならこれですね。

    ngOpen : 2-1-12

    ngOpenはdetails要素にのみ指定できる特殊なディレクティブです。簡単に開閉する要素を作ることができます。

    API Reference: ngOpen

    ngPluralize : 2-1-13

    ngPluralizeは数値によって表示を切り替えるディレクティブです。

    API Reference: ngPluralize

    ngIf : 2-1-14

    ngIfは値がfalseと評価された時、対象のDOMをDOMツリーから削除します。ngShow/ngHideはdisplay: noneで隠すだけですがngIfはDOM自体を削除します。trueと評価された場合にDOMツリーに再構築されます。

    API Reference: ngIf

    ngSwitch : 2-1-15

    ngSwitchはswitch文と同様の役割を果たしテンプレートをケース分けすることができます。

    API Reference: ngSwitch

    ngRepeat : 2-1-16

    ngRepeatはループ処理を行うディレクティブです。

    API Reference: ngRepeat

    ngMessages / ngMessage : 2-1-17

    ngMessagesはメッセージを扱うためのディレクティブです。ngMessagesを使うにはngMessagesモジュールが必要です。DOM操作系のディレクティブの中では一番複雑なサンプルかもしれません。

    API Reference: ngMessages

    以上、DOM操作系のディレクティブサンプルでした。

    シリーズ

    1. AngularJSをはじめる前に - AngularJSに関するサイトやスライドまとめ
    2. ウェブデザイナーがはじめるAngularJS:AngularJSをはじめる
    3. ウェブデザイナーがはじめるAngularJS:SPA(Single Page Application)をはじめる前に
    4. ウェブデザイナーがはじめるAngularJS:MiddlemanとBowerで作るAngularJSアプリ開発環境
    5. ウェブデザイナーがはじめるAngularJS:ngRouteを使ったシンプルなViewの切り替え
    6. ウェブデザイナーがはじめるAngularJS:AngularUI Routerの基礎知識
    7. ウェブデザイナーがはじめるAngularJS:ngCookiesやngStorageを使ったCookieやlocalStorageへのアクセス
    8. ウェブデザイナーがはじめるAngularJS:DOM操作系ディレクティブを試す
    9. ウェブデザイナーがはじめるAngularJS:イベント系ディレクティブを試す
    10. ウェブデザイナーがはじめるAngularJS:Promise(Deferred)をつかった非同期処理
    11. ウェブデザイナーがはじめるAngularJS:$httpProviderのInterceptorsを使ってリクエスト・レスポンスを操作する
    12. ウェブデザイナーがはじめるAngularJS:Middlemanでng-annotateを使ったMinify対策
    13. ウェブデザイナーがはじめるAngularJS:コントローラ間の連携
    14. ウェブデザイナーがはじめるAngularJS:AngularJS向けのディレクティブが用意されたUI Bootstrap

    コメント・フィードバック