Voglio creare un meccanismo di pubblicazione/sottoscrizione con sistema di eventi angolare.Comunicazione evento Angularjs tra direttive con pubblicazione/sottoscrizione
angular.module("app",[]);
angular.module("app").directive("first", function($rootScope){
return {
template: "First Directive",
link:function(scope,element,attribute){
$rootScope.$broadcast("OnFirstDirectiveCreated", {
"message": "I'm first directive"
});
}
}
})
angular.module("app").directive("second", function($rootScope){
return {
template: "Second Directive",
link:function(scope,element,attribute){
var handler = $rootScope.$on("OnFirstDirectiveCreated",
function (event, args) {
console.log("First Directive Message: " + args.message);
});
}
}
})
se ho impostato documento HTML come questo, nessun messaggio appaiono in console:
<div ng-app="app">
<first></first>
<second></second>
</div>
Se cambio ordine prima e la seconda, il messaggio wirite su console.
<div ng-app="app">
<second></second>
<first></first>
</div>
Ma ho bisogno della prima direttiva o direttiva interna.
<div ng-app="app">
<first></first>
<second></second>
</div>
<div ng-app="app">
<first>
<second></second>
</first>
</div>
Ho provato entrambi $rootScope.$broadcast
e $rootScope.$emit
ma non ha woeked.
$ timeout 0 secondi è un po 'confuso me. Se la mia seconda direttiva carica qualche secondo, potrebbe essere un problema? Non possiamo sapere il tempo di caricamento delle altre direttive. – barteloma
Ho aggiornato una risposta, se userai '$ timeout' senza parametro' delay', la funzione verrà eseguita dopo che il DOM ha completato il rendering. – alexmac