Forse stai confondendo un controller che viene creato quando si verifica una modifica di rotta con un controller di direttiva. Quella sezione parla solo di controller di direttiva, quindi ciò che significa questa sezione è che se si hanno due direttive sullo stesso elemento HTML, possono comunicare richiedendo i rispettivi controller.
Un buon esempio è se si crea una direttiva che deve comunicare con ng-model
. Dal momento che ng-model
espone un controller, è possibile richiedere in questo modo:
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
}
}
});
E il codice HTML:
<input type="text" ng-model="myModel" my-directive>
tuo direttiva può esporre un controller implementando nell'oggetto che il vostro funzione ritorna direttiva, come questo:
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();
}
}
});
E il codice HTML:
<input type="text" my-directive2 my-directive1>
È possibile anche richiedere un controller direttiva da una direttiva genitore scrivendo require: '^myParentDirective'
, in questo modo:
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();
}
}
});
E il codice HTML:
<div my-directive1>
<div my-directive2></div>
</div>
Controllare [questa domanda] (http: // StackOverflow. it/questions/14915332/what-does-require-of-directive-definition-object-take) e [questo esempio] (http://jsfiddle.net/bmleite/GSZkJ/). – bmleite
Continuate con buone domande. – Stewie
[quell'esempio] (http://jsfiddle.net/bmleite/GSZkJ/) è un po 'fuorviante. a prima vista sembra che condivida la proprietà 'num' delle istanze del controllore. quando l'unica cosa che sta realmente accadendo è che la direttiva interna copi la funzione di incremento dall'istanza del controller delle direttive esterne all'oggetto dello scope che condivide sia la parte interna che quella esterna. quando viene chiamato dal modello this == l'oggetto scope. vedi questo [esempio ottimizzato] (http://jsfiddle.net/fess/a68Ra/) che prova ad illustrare quei punti. –