Finora ho visto molte soluzioni del problema. Il più semplice è, naturalmente, $emit
un evento in $rootScope
come un bus di eventi, ad es. (https://github.com/btilford/anti-patterns/blob/master/angular/Angular.md)comunicazione globale nel modulo angolare: bus di eventi o modello di mediatore/servizio
angular.module('myModule').directive('directiveA', function($rootScope) {
return {
link : function($scope, $element) {
$element.on('click', function(event) {
$rootScope.$emit('directiveA:clicked', event);
});
}
}
});
angular.module('myModule').directive('directiveB', function() {
return {
link : function($scope, $element) {
$rootScope.on('directiveA:clicked', function(event) {
console.log('received click event from directiveA');
});
}
}
});
e un altro è dichiarare un servizio con una funzionalità mediatore o PubSub/un ambito chiuso ad esempio (. Communicating between a Multiple Controllers and a directive)
module.factory('MessageService',
function() {
var MessageService = {};
var listeners = {};
var count = 0;
MessageService.registerListener = function(listener) {
listeners[count] = listener;
count++;
return (function(currentCount) {
return function() {
delete listeners[currentCount];
}
})(count);
}
MessageService.broadcastMessage = function(message) {
var keys = Object.keys(listeners);
for (var i = 0; i < keys.length; i++) {
listeners[keys[i]](message);
}
}
return MessageService;
}
);
La domanda sono:
- c'è punto di utilizzare il secondo in un'applicazione angolare?
- e quali sono i pro e i contro di ciascuno di questi in confronto tra loro?
la tua domanda sembra interessante, ma per favore aggiungi qualche dettaglio del tuo modulo per evitare downvotes e chiudi prematuramente la tua domanda – InferOn
che tipo di comunicazione? –
es. Semplice scambio di modello o funzione di sparo in un altro ambito/direttiva ecc. –