おそらく、ルート変更が発生したときに作成されるコントローラーと、ディレクティブ コントローラーを混同している可能性があります。そのセクションはディレクティブ コントローラーについてのみ説明しているため、このセクションが意味することは、同じ HTML 要素に 2 つのディレクティブがある場合、それらは互いのコントローラーを要求することで通信できるということです。
その良い例は、 と通信する必要があるディレクティブを作成する場合ですng-model
。コントローラーを公開するためng-model
、次のように要求できます。
myApp.directive('myDirective', function() {
return {
require: 'ngModel',
link: function($scope, elem, attrs, ngModelCtrl) {
// Here you can listen to different DOM events, and
// call ngModelCtrl when the model value needs to update
}
}
});
そしてHTML:
<input type="text" ng-model="myModel" my-directive>
次のように、ディレクティブ関数が返すオブジェクトにコントローラーを実装することで、ディレクティブを公開できます。
myApp.directive('myDirective1', function() {
return {
link: function($scope, elem, attrs) {
},
controller: function() {
this.sayHello = function() {
alert("hello!");
}
}
}
});
myApp.directive('myDirective2', function() {
return {
require: 'myDirective1',
link: function($scope, elem, attrs, myDirective1Ctrl) {
myDirective1Ctrl.sayHello();
}
}
});
そしてHTML:
<input type="text" my-directive2 my-directive1>
次のように記述することで、親ディレクティブからディレクティブ コントローラーを要求することもできますrequire: '^myParentDirective'
。
myApp.directive('myDirective1', function() {
return {
link: function($scope, elem, attrs) {
},
controller: function() {
this.sayHello = function() {
alert("hello!");
}
}
}
});
myApp.directive('myDirective2', function() {
return {
require: '^myDirective1',
link: function($scope, elem, attrs, myDirective1Ctrl) {
myDirective1Ctrl.sayHello();
}
}
});
そしてHTML:
<div my-directive1>
<div my-directive2></div>
</div>