Пример 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();
});
}