AngularJS广播事件会在自己的范围内触发$ on?

时间:2017-12-13 18:42:38

标签: angularjs angularjs-directive directive broadcast

我正在实现事件反射器指令。它的唯一目的是听一个事件并将其广播到儿童范围。原因是:我有几个组件需要彼此沟通,但它们不是直接的父子关系(假设他们是兄弟姐妹)。

<div reflector="customEvent">
  <component1...></component1>
  <component2...></component2>
</div>

如果我想在component1中引发一个事件“customEvent”并在component2中捕获它,我会将我的reflector指令放在父范围内。这会将事件重新发送给所有孩子,从而达到组件2。这是指令:

angular.module('tripactions')
.directive('reflector', [function () {
return {
    restrict: 'A',
    link: function(scope, element, attrs) {
        var ignore = false;
        scope.$on(attrs.reflector, function(data) {
            if (!ignore) {
                ignore = true;
                scope.$broadcast(attrs.reflector, data);
            }
            ignore = false;
        });
    }
};
}]);

问题是看起来像是从指令中的范围调用广播也会在同一范围内引发事件,从而创建无限循环。我认为它应该只在孩子们中引发事件(至少根据我所读到的)。如何仅向儿童播放活动或解决我当前的问题?

Edit1:我更新了原始代码并添加了ignore flag来阻止广播到自己。感觉很乱,但我不知道其他任何方式。

0 个答案:

没有答案