AngularJSのよく使うdirectiveの紹介です。
今回は「ng-if」、「ng-class」、「ng-repeat」、「ng-click」、「ng-cloak」を紹介していますが、他にも便利なdirectiveがありますので公式ページのDeveroperのAPIリファレンスで確認すると良いでしょう。
ng-ifの使い方
「ng-if」はその値が「true」か「false」かで評価して「true」だったら「ng-if」属性の付いたDOMを表示し、「false」なら非表示にしてくれます。
ng-ifデモ
HTMLコード
<div ng-controller="mainController"> <div> <label>ユーザー名を入力してください:</label> <input type="text" ng-model="name" /> </div> <div ng-if="name.length !== characters">ユーザー名は5文字にしてください</div> <hr> <p>ユーザー名は…{{name}}</p> </div> </div>
AngularJSコード
var myApp = angular.module('myApp', []); myApp.controller('mainController', ['$scope', function ($scope) { $scope.name = ''; $scope.characters = 5; }]);
「ng-if」と似たようなdirectiveに「ng-show」と「ng-hide」があります。これはDOMは存在するが隠したり表示したりするものです。
一方「ng-if」はDOM自体を隠したり表示したりするものです。
ng-classの使い方
「ng-class」はclassをつけたり外したりします。
「ng-if」と合わせて使う場合もあります。
<div ng-class="{'alert-warning':name.length < 5,'alert-danger':name.length > 5}" >ユーザー名は5文字にしてください</div>
AngularJSコード
var myApp = angular.module('myApp', []); myApp.controller('mainController', ['$scope', function ($scope) { $scope.name = ''; $scope.characters = 5; }]);
ng-repeatの使い方
「ng-repeat」は同じことを繰り返したいときに使います。比較的よく使われるdirectiveです。
HTML側の繰り返したい要素、例えばliに「ng-repeat=”rule in rules”」と記述します。
値の「rules」はAngularJS側で$scopeに付けたプロパティ名です。「rule」の方は好きな名前で構いませんが、「{{rule.myText}}」のインターポレーションの中でこの名前を使います。好きなところでプロパティを追加できるのは、やりたい放題なJavaScriptの特徴ですね。
ng-repeatデモ
HTMLコード
<ul> <li ng-repeat="rule in rules">{{rule.myText}}</li> </ul>
AngularJS側は$scopeに「rules」というプロパティを作って配列の値を代入しています。
この配列の要素はオブジェクトになっており、キーは好きな名前を付けます。このキーはHTML側のインターポレートで使用します。そしてオブジェクトの値がループさせたliの中身になる要素です。
AngularJSコード
var myApp = angular.module('myApp', []); myApp.controller('mainController',['$scope',function($scope) { $scope.rules = [ {myText:'AAAAAAAAAAA'}, {myText:'BBBBBBBBBBB'}, {myText:'CCCCCCCCCCC'} ]; }]);
ng-clickの使い方
「ng-click」はクリックしたら関数を実行するDirectiveです。イベントリスナーもdirectiveを使って設定できます。
HTML側に「ng-click」属性を置き、値に関数を置きます。
AngularJS側で関数の定義を記述します。
ng-clickデモ
HTMLコード
<div ng-controller="mainController"> <button ng-click="alertClick()">click</button> </div>
AngularJSコード
var myApp = angular.module('myApp', []); myApp.controller('mainController',['$scope',function($scope) { $scope.alertClick = function(){ alert('クリックした'); } }]);
イベント関連のdirectiveは次のようなものがあります。
ディレクティブ名 | 概要 |
---|---|
ng-focus | フォーカスが当たった時 |
ng-blur | フォーカスがはずれた時 |
ng-change | 要素の内容が変わった時 |
ng-click | クリックされた時 |
ng-dblclick | ダブルクリックされた時 |
ng-submit | フォームがサブミットされた時 |
ng-copy | コピーされた時 |
ng-cut | 切り取り時 |
ng-paste | 貼り付け時 |
ng-keydown | キーボードのキーがダウンした時 |
ng-keypress | キーボードのキーを押し続けている時 |
ng-keyup | キーボードのキーがアップした時 |
ng-mousedown | マウスのクリックでボタンが押された時 |
ng-mouseup | マウスのクリックでボタンがアップした時 |
ng-mouseenter | マウスのカーソルが指定した要素内に入った時 |
ng-mouseleave | マウスのカーソルが指定した要素から出た時 |
ng-mousemove | マウスのカーソルが移動した時 |
ng-mouseover | マウスのカーソルが指定した要素の上にある時 |
ng-cloakについて
AngularJS読み込みの関係で、「{{ }}」が一瞬表示されてしまうのを防ぐのが「ng-cloak」です。
directiveは多くのものが用意されています。
各directiveの詳細は公式ページのDeveroperのAPIリファレンスで確認することができます。