Rozumiem, że $ emit wysyła wiadomości do drzewa DOM, a transmisja $ wysyła wiadomości w dół.Propagacja zdarzenia AngularJS - rodzeństwo?
Co z wysyłaniem wiadomości między rodzimymi elementami DOM — jak to zrobić?
Rozumiem, że $ emit wysyła wiadomości do drzewa DOM, a transmisja $ wysyła wiadomości w dół.Propagacja zdarzenia AngularJS - rodzeństwo?
Co z wysyłaniem wiadomości między rodzimymi elementami DOM — jak to zrobić?
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).
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
});
W moim przypadku jestem całkiem zadowolony z:
$rootScope.$broadcast('my event');
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. –
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. –