Angular: 忽略自己发出的消息

Angular: ignore messages emitted by self

我有一个扩展和关闭 div 高度的指令。它被多次使用,所以当用户打开一个盒子时,我想关闭其他打开的盒子。我认为最好发出一个事件,但问题是该指令随后也会自行关闭,因此无法打开 div。

我可以忽略来自同一指令的消息吗?

angular.module('cinemaApp')
.directive('expand', function ($rootScope) {
 return {
  restrict: 'A',
  link: function postLink(scope, element, attrs) {
    $rootScope.$on('contract', function(payload) {
      element.css('height', attrs.fixedheight);
    });

    scope.$watch('open', function(value) {
        element.css('height', (value ? 'auto' : attrs.fixedheight));

      $rootScope.$emit('contract');
    });
    element.css('height', attrs.fixedheight);
  }
 };
});

当您发出事件时,您可以传递给侦听器的额外参数。所以你可以发出像

$rootScope.$emit('contract', element);

喜欢听

$rootScope.$on('contract', function(event, target) {
  if (target != element)
    element.css('height', attrs.fixedheight);
});