繁体   English   中英

检测何时删除DOM节点?

[英]Detect when a DOM node is removed?

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

指令:showOnlyOne说明:附加到dom节点,并确保一次只能看到一个附加了该指令的dom节点。
用法:

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

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

在这种情况下,显示的将是“两个” ...现在想象一下,由于外部事件,section元素将得到一个jqLit​​e .remove()调用。 现在,我如何检测到“两个”已被删除,然后重新激活“一个”以使其显示?

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);
  };
}]);

角度听(最佳实践)的方式是通过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    
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM