Задать вопрос
@crazyjs

Зачем $destroy у angularJS?

Объясните с примерами для каких целей используется:
scope.$on('$destroy', function() {})
  • Вопрос задан
  • 5138 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
miraage
@miraage
Старый прогер
Пример 1

Представим директиву для bootstrap tooltip.
В link-функции мы пишем elem.tooltip({ /* opts */);

Скажем, у нас есть таблица с 10 строками - tr, через ngRepeat.
Нажали на кнопку в одном из td, открылся tooltip. Пока он висит, строка исчезает по какому-то условию, допусти filter. БИНГО! tooltip останется. Чтобы убрать его, в link-функции директивы надо написать примерно такой код:

scope.$on('$destroy', function() {
  elem.tooltip('destroy');
}


Пример 2

Коммуникация контроллеров. Порой не всегда удобно использовать фабрики/сервисы для этого. Если не вызвать функцию-дерегистратор - обработчик события останется в $rootScope навсегда и будет вызываться.

function FooCtrl($rootScope) {
  this.someMethod = function() {
    // some code ...
    if (someCondition) {
      $rootScope.$emit('someEvent');
    }
  }
}

function BarCtrl($scope, $rootScope) {
  var deregFn = $rootScope.$on('someEvent', function() {
    // some code ..
  };

  $scope.$on('$destroy', function() {
    deregFn();
  });
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@kwolfy
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы