2014-09-20 3 views
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(), называемый на нем. Теперь, как я обнаружил, что «два» были удалены, а затем повторно активировать «один», чтобы он отображался?

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

Когда вы удалили этот элемент из DOM, как вы сказали в описании jqLite.remove(), в это время используйте событие $ broadcast/emit (прошедшее обязательные данные) и добавьте listner, используя $ on, вы можете слушать это –

+0

@PradeepMahdevu даже с этим намеком, Я все еще недостаточно умен, чтобы понять, как использовать ngChange для выполнения задачи в этой ситуации. Для дальнейшего уточнения я не могу контролировать jqLite.remove(), который вызывается, поэтому я не могу добавить свою собственную трансляцию событий, когда это происходит. (Это происходит в другой структуре.) – JayPrime2012

ответ