So già che è possibile impostare un controller all'interno di una direttiva e che altre direttive possono chiamare le funzioni su quel controller. Ecco ciò che il mio attuale direttiva si presenta come:Comunicazione direttiva-direttiva in AngularJS?
app.directive("foobar", function() {
return {
restrict: "A",
controller: function($scope) {
$scope.trigger = function() {
// do stuff
};
},
link: function(scope, element) {
// do more stuff
}
};
});
So che potrei chiamare in questo modo:
app.directive("bazqux", function() {
return {
restrict: "A",
require: "foobar",
link: function(scope, element, attrs, fooBarCtrl) {
fooBarCtrl.trigger();
}
};
});
Tuttavia, voglio essere in grado di chiamare grilletto da qualsiasi direttiva, non solo i miei personalizzati, come questo:
Se ciò non funziona, c'è un modo per introdurre una terza direttiva per farlo accadere? Come questo?
<button ng-click="trigger()" target-directive="foobar">Click me!</button>
Grazie!
Questo è fantastico. Funziona come un fascino! –
Non farlo, inquinerà rootscope, creerà un servizio o forse richiederà la direttiva. –
indicando '$ rootScope' gotchas: http://jsfiddle.net/drzaus/a1gm7q4u/ fondamentalmente come @ WillemD'haeseleer ha detto, è possibile ottenere effetti collaterali che inviano le cose verso l'alto/verso il basso da' $ rootScope' se altri "isolati" gli ambiti stanno ascoltando la stessa cosa (vale a dire direttiva ripetuta o controller) – drzaus