0
我正在嘗試編寫一個指令,以確保在任何給定時間只有其中一個元素保持活動狀態。檢測DOM節點何時被刪除?
指令:showOnlyOne 描述:附加到一個dom節點,並確保一次只有一個連接了該指令的dom節點可見。
用法:
<body>
<div id="one" show-only-one></div>
<section>
<div id="two" show-only-one></div>
</section>
</body>
在這種情況下,一個會顯示將是「二」 ......現在想象的是,由於部分元素獲得一個jqLite一個.remove()調用了它的外部事件。現在我該如何檢測「two」已被刪除,然後重新激活「one」以便顯示?
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);
};
}]);
你爲什麼不把一個和兩個在陣列中,並採用NG-變化進行跟蹤,如果一個變化他們已被刪除? – 2014-09-20 14:36:36
當你從描述jqLite.remove()中說當時你從DOM中刪除該元素使用$廣播/發射(通過所需的數據)事件和使用$添加列表器,你可以聽那 – 2014-09-20 14:37:35
@PradeepMahdevu即使有了這個提示,我還不夠聰明,無法理解在這種情況下如何使用ngChange完成任務。爲了進一步澄清,我無法控制被調用的jqLite.remove(),所以當它發生時我不能添加我自己的事件廣播。 (它發生在另一個框架中。) – JayPrime2012 2014-09-20 14:40:56