2014-09-20 134 views
0

我正在嘗試編寫一個指令,以確保在任何給定時間只有其中一個元素保持活動狀態。檢測DOM節點何時被刪除?

指令:showOnlyOne 描述:附加到一個dom節點,並確保一次只有一個連接了該指令的dom節點可見。
用法:

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

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

在這種情況下,一個會顯示將是「二」 ......現在想象的是,由於部分元素獲得一個jqLit​​e一個.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); 
    }; 
}]); 
+0

你爲什麼不把一個和兩個在陣列中,並採用NG-變化進行跟蹤,如果一個變化他們已被刪除? – 2014-09-20 14:36:36

+0

當你從描述jqLit​​e.remove()中說當時你從DOM中刪除該元素使用$廣播/發射(通過所需的數據)事件和使用$添加列表器,你可以聽那 – 2014-09-20 14:37:35

+0

@PradeepMahdevu即使有了這個提示,我還不夠聰明,無法理解在這種情況下如何使用ngChange完成任務。爲了進一步澄清,我無法控制被調用的jqLit​​e.remove(),所以當它發生時我不能添加我自己的事件廣播。 (它發生在另一個框架中。) – JayPrime2012 2014-09-20 14:40:56

回答