ディレクティブとは「任意のページにドロップできるウィジェットに一連の機能をカプセル化するもの」と大まかに要約できると思いますが、それだけではありません。ディレクティブは、新しいタグを作成して HTML を拡張し、より表現力豊かなマークアップを記述できるようにする方法です。たとえば、評価コントロールを作成するために<div>
一連のタグを記述する代わりに、新しいタグ<li>
でラップすることができます。または、たくさんの や などをタブ付きのインターフェイスを作成する<rating>
代わりに、 と などのディレクティブのペアを実装して、次のように使用することもできます。<div>
<span>
<tab>
<tab-page>
<tab>
<tab-page title="Tab 1"> tab content goes here </tab-page>
<tab-page title="Tab 2"> tab content goes here </tab-page>
</tab>
これこそが、HTML を拡張するディレクティブの真の力です。これは、「一般的な」ディレクティブのみを作成する必要があるという意味ではありません。アプリケーションに固有のコンポーネントを作成できますし、作成する必要があります。したがって、質問に戻る<loggedinuser>
と、コントローラーに情報を提供する必要なく、ログに記録されたユーザーの名前を表示するタグを実装できます。しかし、そのためにグローバル変数に頼るべきではありません。それを行うAngularの方法は、サービスを利用してその情報を保存し、それをディレクティブに挿入することです。
app.controller('MainCtrl', function($scope, userInfo) {
$scope.logIn = function() {
userInfo.logIn('Walter White');
};
$scope.logOut = function() {
userInfo.logOut();
};
});
app.service('userInfo', function() {
this.username = ''
this.logIn = function(username) {
this.username = username;
};
this.logOut = function() {
this.username = '';
};
});
app.directive('loggedinUser', function(userInfo) {
return {
restrict: 'E',
scope: true,
template: '<h1>{{ userInfo.username }}</h1>',
controller: function($scope) {
$scope.userInfo = userInfo;
}
};
});
ここでプランカー。
強力で再利用可能なディレクティブの作成を開始したい場合は、ディレクティブに関するAngular 開発者ガイドを参照してください。