我正在尝试编写一个指令,该指令将确保在任何给定时间只有一个元素保持活动状态。
指令:showOnlyOne 描述:附加到dom节点并确保一次只能看到附加了此指令的一个dom节点 用法:
<body>
<div id="one" show-only-one></div>
<section>
<div id="two" show-only-one></div>
</section>
</body>
在这种情况下,显示的那个将是&#34;两个&#34; ...现在想象一下,由于外部事件,section元素获得了一个jqLite .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);
};
}]);
答案 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
});