2016-09-13 3 views
2

Мы подписаться на трансляцию событий в нашем конструкторе контроллера, как это:

var unsubscribe = $scope.$on("event-name", function() { // handle it }); 

И когда контроллер разрушается мы отписать, как это, чтобы предотвратить утечку памяти

$scope.$on("$destroy", function() { 
    unsubscribe(); 
    unsubscribe = null; 
}); 

Но где-то я читал, что вызов это не нужен, так как при уничтожении контроллера подписанные обработчики уничтожаются автоматически (если они объявлены в области контроллера, что в данном случае есть).

Отказаться от них вручную действительно необходимо?

ответ

1

Технически вам не нужно отписаться от $scope.$on событий, так как $scope уничтожает вместе с прослушивателями событий. (и вам не нужно также устанавливать переменную в значение null).

Это отличное от $rootScope.$on слушателей, так как $rootScope не уничтожено.

Это считается плохой практикой для прослушивания событий с использованием $scope.$on или создания событий внутри $ scope.

  1. Вы подвергаете себя имя конфликтует
  2. Вы запутывание коды путем добавления событий, которые будут трудно находки, когда код становится больше
  3. Этих события имеют смысл для применения мудро событий (Логин , logout, уведомление ... и т. д.), но не для небольших изолированных событий («полученный-товарный список»)
  4. Рефакторинг вашего кода, чтобы заменить события $ scope на обещания.
+0

Спасибо за разъяснение. Мы используем это для прослушивания трансляционных событий, которые поступают от сторонней директивы, которую мы используем. Для нашего кода мы не используем этот подход. – jabko87

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