2014-01-07 5 views
1

Я пытаюсь реализовать простую директиву в AngularJS. В частности, я хочу создать кнопку загрузчика, которая изменит ее аспект при нажатии, и я хочу повторно использовать его на всех страницах моего приложения, которые в ней нуждаются.Удаление прослушивателей событий из директивы в AngularJS

Я прочитал на руководстве для разработчиков, которые:.

«Есть несколько специальных событий, которые излучают AngularJS Когда узел DOM, который был собран с компилятором ANGULAR уничтожаются, он испускает $ уничтожить событие Аналогично, когда область AngularJS уничтожена, она транслирует событие $ destroy в области прослушивания. Слушая это событие, вы можете удалить прослушиватели событий, которые могут вызвать утечку памяти. Слушатели, зарегистрированные в областях и элементах, автоматически очищаются, когда они но если вы зарегистрировали прослушиватель в службе или зарегистрировали прослушиватель на узле DOM, который не удаляется, вам придется очистить его самостоятельно или вы рискуете ввести утечку памяти ».

В моей функции связи я поставил этот код для слушателя событий:

var onLoaderButtonClickEvent = element.on('click', function(){ 
//Some stuff 

}); 

Теперь есть я считаю, что в качестве слушателя на DOM элемента (и поэтому я должен удалить его) или нет? Я немного озадачен.

Я думаю, что мне не нужно удалять слушателя, потому что он находится на «элементе». Правильно ли это?

Thx всем

+0

Почему, по вашему мнению, вам нужно будет удалить слушателя? –

+0

Причина: Я не понимаю разницы между «элементом» и узлом DOM, указанным в документации, которую я написал ранее. Я думаю, что событие, подобное: element.on ('click', someFunction), не должно быть удалено, в то время как должно быть удалено событие типа $ ('# somenode'). On ('click', somefunction). Правильно ли это? – ira

ответ

0

Ответ на этот вопрос да. Поскольку вы прикрепляете обработчик событий за пределами AngularJS, вам нужно очистить его самостоятельно.

Вы можете сделать это, слушая $destroy события:

scope.$on('$destroy', function(){ 
    element.off('click'); 
}); 
+1

[этот ответ stackoverflow] (http://stackoverflow.com/a/27016855/3523645) говорит обратное. – timetowonder

1

element.remove() вызывается автоматически, когда директива разрушается, тем самым устраняя всех слушателей на элементе. Вам нужно только удалить DOM-прослушиватели вручную, если вы привязали их к любым другим элементам DOM.

От угловой-х documentation:

Слушателей прописали прицелы и элементы автоматически очищаются, когда они будут уничтожены, но если вы зарегистрировали слушатель на службе, или зарегистрирован прослушиватель на узле DOM, который ISN» t удаляется, вам придется очистить его самостоятельно или вы рискуете ввести утечку памяти.

Смежные вопросы