AngularJS は、ディレクティブと言う新しい属性で HTML を拡張します。
AngularJS は、アプリケーションに機能を提供する、一連の組込みディレクティブを持っています。
AngularJS では、独自のディレクティブを定義することもできます。
AngularJS ディレクティブは、接頭辞 ng-
によって拡張された HTML 属性です。
ng-app
ディレクティブは、AngularJS アプリケーションを初期化します。
ng-init
ディレクティブは、アプリケーションデータを初期化します。
ng-model
ディレクティブは、HTML コントロール(input、select、textarea)の値を
アプリケーションデータへとバインドします。
全ての AngularJS ディレクティブについては、AngularJS ディレクティブ・リファレンス をご覧ください。
<div ng-app="" ng-init="firstName='John'">
<p>Name: <input type="text" ng-model="firstName"></p>
<p>You wrote: {{ firstName }}</p>
</div>
Try it Yourself »
ng-app
ディレクティブは、<div> 要素が AngularJS アプリケーションの「所有者」であることも
AngularJS に知らせます。
上の例の {{ firstName }}
式は、AngularJS のデータ・バインド式です。
AngularJS のデータバインドは、AngularJS データに AngularJS 式をバインドします。
{{ firstName }}
は、ng-model="firstName"
にバインドします。
次の例では、2 つのテキストフィールドを相互に2つの ng-model ディレクティブにバインドします:
<div ng-app="" ng-init="quantity=1;price=5">
Quantity: <input type="number" ng-model="quantity">
Costs: <input type="number" ng-model="price">
Total in dollar: {{ quantity * price }}
</div>
Try it Yourself »
ng-init を使用するのは、あまり一般的ではありません。
データの初期化方法は、コントローラに関する章の中で学習します。 |
ng-repeat
ディレクティブは、HTML要素を繰返します:
<div ng-app="" ng-init="names=['Jani','Hege','Kai']">
<ul>
<li ng-repeat="x in names">
{{ x }}
</li>
</ul>
</div>
Try it Yourself »
ng-repeat
は、実際に、ディレクティブはコレクション内の各項目ごとに一旦 HTML 要素を複製します。
オブジェクトの配列で使用される ng-repeat
ディレクティブ:
<div ng-app="" ng-init="names=[
{name:'Jani',country:'Norway'},
{name:'Hege',country:'Sweden'},
{name:'Kai',country:'Denmark'}]">
<ul>
<li ng-repeat="x in names">
{{ x.name + ', ' + x.country }}
</li>
</ul>
</div>
Try it Yourself »
AngularJS は、データベースの CRUD (Create Read Update Delete) アプリケーションに最適です。 これらのオブジェクトが、データベースからのレコードだった場合を想像してみてください。 |
ng-app
ディレクティブは、AngularJS アプリケーションのルート要素を定義します。
ng-app
ディレクティブは、Web ページがロードされたときに、
auto-bootstrap(自動初期化)を行います。
ng-init
ディレクティブは、AngularJS アプリケーションの初期値を定義します。
通常は、ng-init を使用しません。代わりに、コントローラかモジュールを使用します。
後段で、コントローラとモジュールに関する詳細を学習します。
ng-model
ディレクティブは、HTML コントローラ(input、select、textarea)の値を
アプリケーション・データにバインドします。
ng-model
ディレクティブは、以下のことも可能です:
次の章では、ng-model
ディレクティブに関する詳細を学習します。
組込みの AngularJS ディレクティブに加えて、独自のディレクティブを作成することができます。
新規ディレクティブは、.directive
関数を使用して作成します
新規ディレクティブを呼び出すには、新規ディレクティブと同じタグ名を持つ HTML 要素を作ります。
ディレクティブに名前を付ける場合は、w3TestDirective
のようにキャメルケースを使用しなければなりません。
しかし、呼び出す場合は、-
区切りの名前 w3-test-directive
を使用しなければなりません:
<body ng-app="myApp">
<w3-test-directive></w3-test-directive>
<script>
var app = angular.module("myApp", []);
app.directive("w3TestDirective",
function() {
return {
template : "<h1>Made by a directive!</h1>"
};
});
</script>
</body>
Try it Yourself »
次を使用することで、ディレクティブを呼び出すことができます:
下の例は、すべて同じ結果になります:
メソッドを呼び出すためのディレクティブを制限することができます。
値 "A"
を持った restrict
プロパティを追加することにより、
ディレクティブは属性によってのみ呼び出すことができます:
var app = angular.module("myApp", []);
app.directive("w3TestDirective",
function() {
return {
restrict : "A",
template : "<h1>Made by a directive!</h1>"
};
});
Try it Yourself »
正当な restrict の値は、以下の通りです:
E
要素名用A
属性用C
クラス用M
コメント用デフォルト値は EA
で、要素名と属性名の両方によってディレクティブを呼び出すことができることを意味します。