12

我知道 $emit 在 DOM 树上发送消息,而 $broadcast 向下发送消息。

在兄弟 DOM 元素之间发送消息怎么样?我该怎么做?

4

3 回答 3

15

它不会将它发送到 DOM 树。它将它发送到作用域树上,因此在处理作用域时没有同级 DOM 元素的概念。不过,您可以使用 $emit 将其 $emit 发送给父级,停止传播,然后广播所有兄弟姐妹(以及他们的孩子)将接收的内容

于 2014-09-05T17:21:59.560 回答
11

没有发送到具有相同父级的作用域的机制。通常,您将从根范围广播,因为您的消息应该是唯一的,并且大多数范围会忽略它们。您可以从父级广播,它应该忽略树上更远的范围及其后代,但它仍会向下传递到父级的所有后代,而不仅仅是您正在查看的范围的兄弟姐妹。如果您的父母不是广播它的范围,您总是可以忽略该消息:

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

$scope.$on('MyUniqueEventName', function(event, data) {
    if ($scope.$parent !== event.targetScope) {
        return;
    }
    // do something with data
});
于 2014-09-05T17:38:56.547 回答
0

就我而言,我很满意:

$rootScope.$broadcast('my event');
于 2016-09-14T11:32:09.877 回答