检测何时删除DOM节点?

时间:2014-09-20 14:18:10

标签: javascript angularjs

我正在尝试编写一个指令,该指令将确保在任何给定时间只有一个元素保持活动状态。

指令:showOnlyOne 描述:附加到dom节点并确保一次只能看到附加了此指令的一个dom节点 用法:

<body>
<div id="one" show-only-one></div>

<section> 
<div id="two" show-only-one></div>
</section>
</body>

在这种情况下,显示的那个将是&#34;两个&#34; ...现在想象一下,由于外部事件,section元素获得了一个jqLit​​e .remove()。现在我如何检测到&#34;两个&#34;已删除,然后重新激活&#34;一个&#34;所以会显示出来?

angular.module('SWS')
.directive('swsOnlyOne', ['$log', '$interval', function($log, $interval) {
  var billies = [];
  return function(scope, elem, attrs) {
    if (billies.length > 0) {
      _.each(billies, function(b) {
        b.css('visibility', 'hidden');
      });
    }
    elem[0].addEventListener('DOMNodeRemoved', function(ev) {
      // THIS DOM EVENT WILL NEVER FIRE...
      if ('hidden' != elem.css('visibility')) {
        billies.splice(billies.indexOf(elem), 1);
        billies[billies.length].css('visibility', 'visible');
      }
    }, false);

    billies.push(elem);
  };
}]);

1 个答案:

答案 0 :(得分:0)

您使用角度(最佳做法)倾听的方式是使用scope.on("$destroy", fn) https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$destroy

$scope.on("$destroy", function(event){
   // cleanup
});

// but can also be used on elements
elem.on("$destroy", function(event){
   // cleanup    
});