我明白$emit会向DOM树上传递信息,而$broadcast会向下传递信息。那么如何在兄弟DOM元素之间发送消息呢?
它不会将其发送到DOM树中。它将其发送到作用域树中,因此在处理作用域时不存在兄弟DOM元素的概念。但是,您可以使用$emit将其传递给父级,停止传播,然后广播,所有兄弟都会接收(以及它们的子级)。
没有机制可以向具有相同父级的范围发送消息。通常情况下,您应该从根作用域广播,因为您的消息应该是唯一的,大多数作用域都会忽略它们。您可以从父作用域广播,这样应该忽略树上更高层次和其后代的范围,但仍会传递到父级的所有后代,而不仅仅是您正在查看的范围的同级。如果您的父级不是广播所在的作用域,您始终可以忽略该消息:
$scope.$parent.$broadcast('MyUniqueEventName', data);
$scope.$on('MyUniqueEventName', function(event, data) {
if ($scope.$parent !== event.targetScope) {
return;
}
// do something with data
});
在我的情况下,我非常满意:
$rootScope.$broadcast('my event');