2014-09-05 25 views

risposta

12

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)

9

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 
}); 
+1

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. –

+0

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. –

0

Nel mio caso io sono abbastanza soddisfatto:

$rootScope.$broadcast('my event');