Если область видимости прикреплена к элементу element.$on('destroy')
и $scope.$on('$destroy')
, делайте одно и то же.
Но если нет, то разница есть.Например, не все элементы имеют собственную область видимости:
<div ng-if=""> // has scope
<div> // no own scope
<div some-directive-without-scope> // no own scope, you can inject $element, $scope in directive here but they are not bound to each other
Также хочу отметить, что если вы транслируете какое-то событие на $ rootScope:
$rootScope.$broadcast('myEvent')
Обычный способ прослушивания:
$scope.$on('broadcastedEvent', function() {
doThings();
});
И здесь вам не нужно ничего отменять регистрацию - все $ на обработчиках удаляются при уничтожении области действия.