2014-09-05 44 views

Odpowiedz

12

Nie wysyła go do drzewa DOM. Wysyła je do drzewa zasięgu, więc nie ma koncepcji rodzeństwa elementów DOM podczas pracy z zakresami. Co możesz zrobić, gdy emitujesz $ to $ emituje to do rodzica, zatrzymuj propagację, a następnie nadawaj, które wszystkie rodzeństwo odbierze (a także ich dzieci).

9

Nie ma mechanizmu wysyłania do zakresów z ten sam rodzic. Generalnie będziesz nadawać z zakresu głównego, ponieważ twoje wiadomości powinny być unikalne i większość ich zakresów po prostu je zignoruje. Możesz nadawać od rodzica, który powinien zignorować zasięgi drzewa i ich potomków, ale nadal będzie leżeć w dół dla wszystkich potomków rodzica, a nie tylko rodzeństwa zakresu, na który patrzysz. zawsze można zignorować, jeśli rodzic nie jest to zakres był transmitowany na:

$scope.$parent.$broadcast('MyUniqueEventName', data); 

$scope.$on('MyUniqueEventName', function(event, data) { 
    if ($scope.$parent !== event.targetScope) { 
     return; 
    } 
    // do something with data 
}); 
+1

Po prostu trzeba być ostrożnym z tego podejście, ponieważ ciasno łączy twój kod, musisz zawsze ręcznie upewnić się, że $ scope. $ parent jest właściwym rodzicem, co sprawia, że ​​twój kod jest mniej trwały. –

+0

Bardzo prawdziwe. Na przykład, jeśli masz to w repeateru, przełącznik lub jeśli stworzy on zakres podrzędny, a zasięg, z którego chcesz transmitować, łatwo może być dziadkiem. –

0

W moim przypadku jestem całkiem zadowolony z:

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