В чем разница между $ element.on ("$ destroy", fn) и $ scope. $ On ("$ destroy", fn) с точки зрения их роли в цикле дайджеста? - PullRequest
0 голосов
/ 20 сентября 2018

Я рефакторинг своей базы кода из этого:

$rootScope.$on('broadcastedEvent', function() {
  doThings(); 
});
// nothing else is done

К этому:

var deregisterFn = $rootScope.$on('broadcastedEvent', function() {
  doThings(); 
});

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

И где-то в коде (полностью не связан с моим первым примером), я заметилчто он реализован по-другому, как это:

var deregisterFn = $rootScope.$on('broadcastedEvent', function() {
  doThings(); 
});

$element.on('$destroy', function() {
  deregisterFn();
});

Насколько различны $ element.on ("$ destroy", fn) и $ scope. $ on ("$ destroy", fn)?

1 Ответ

0 голосов
/ 20 сентября 2018

Если область видимости прикреплена к элементу 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(); 
});

И здесь вам не нужно ничего отменять регистрацию - все $ на обработчиках удаляются при уничтожении области действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...