Capisco che $ emit manda messaggi sulla struttura DOM, e $ broadcast manda i messaggi verso il basso.Propagazione evento AngularJS - fratelli?
Che dire di inviare messaggi tra elementi DOM di pari livello — come faccio?
Capisco che $ emit manda messaggi sulla struttura DOM, e $ broadcast manda i messaggi verso il basso.Propagazione evento AngularJS - fratelli?
Che dire di inviare messaggi tra elementi DOM di pari livello — come faccio?
Non invia l'albero DOM. Lo manda sulla struttura ad albero, quindi non c'è alcun concetto di elementi DOM di pari livello quando si ha a che fare con gli ambiti. Quello che puoi fare con $ emit è però $ emetterlo al genitore, interrompere la propagazione e poi trasmettere quello che tutti i fratelli prenderanno (così come i loro figli)
Non c'è alcun meccanismo per l'invio agli ambiti con il stesso genitore. Generalmente si diffondeva dall'ambito di root poiché i messaggi dovrebbero essere unici e la maggior parte degli scope li ignorerebbe. Potresti trasmettere dal genitore che dovrebbe ignorare gli ambiti più in alto sull'albero e i loro discendenti, ma continuerà a canalizzare verso tutti i discendenti del genitore, non solo i fratelli dell'ambito che stai osservando. Si può sempre ignorare il messaggio se il genitore non è il campo di applicazione è stato trasmesso su:
$scope.$parent.$broadcast('MyUniqueEventName', data);
$scope.$on('MyUniqueEventName', function(event, data) {
if ($scope.$parent !== event.targetScope) {
return;
}
// do something with data
});
Nel mio caso io sono abbastanza soddisfatto:
$rootScope.$broadcast('my event');
Bisogna solo stare attenti con questo approccio perché collega strettamente il tuo codice, devi sempre garantire manualmente che $ scope. $ parent sia il genitore corretto, il che rende il tuo codice meno duraturo. –
Molto vero. Ad esempio se si ha questo in un ripetitore, un interruttore o un se creerà un ambito figlio e l'ambito che si desidera trasmettere potrebbe essere facilmente il nonno. –