Я пытаюсь написать директиву, которая гарантирует, что только один из ее элементов останется активным в любой момент времени.Обнаруживать, когда удаляется узел 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);
};
}]);
Почему вы не поставить один и два в массиве, а также использование нг-изменения для отслеживания изменений, если один из они были удалены? –
Когда вы удалили этот элемент из DOM, как вы сказали в описании jqLite.remove(), в это время используйте событие $ broadcast/emit (прошедшее обязательные данные) и добавьте listner, используя $ on, вы можете слушать это –
@PradeepMahdevu даже с этим намеком, Я все еще недостаточно умен, чтобы понять, как использовать ngChange для выполнения задачи в этой ситуации. Для дальнейшего уточнения я не могу контролировать jqLite.remove(), который вызывается, поэтому я не могу добавить свою собственную трансляцию событий, когда это происходит. (Это происходит в другой структуре.) – JayPrime2012