Как отвязать $в угловой?


У меня есть код, который использует $scope.$on один раз на init, а затем в функции, поэтому код выполняется несколько раз. Как я могу развязать, если сначала, прежде чем я свяжу его снова. Я попробовал $ scope.$ выкл, но там нет такой функции, docs.angularjs.org/api ничего не говори о $on. Я использую угловой 1.0.6.

2 9

2 ответа:

Если вы не отмените регистрацию события, вы получите утечку памяти, так как функция, которую вы передаете $on, не будет очищена (поскольку ссылка на нее все еще существует). Что еще более важно, любые переменные, на которые ссылается функция в своей области видимости, также будут пропущены. Это приведет к тому, что ваша функция будет вызываться несколько раз, если ваш контроллер будет создан/уничтожен несколько раз в приложении. К счастью, AngularJS предоставляет несколько полезных методов, чтобы избежать утечек памяти и нежелательных поведение:

    Метод $on возвращает функцию, которая может быть вызвана для отмены регистрации прослушивателя событий.
  • всякий раз, когда область очищается в Angular (т. е. контроллер уничтожается), событие $destroy запускается в этой области. Вы можете зарегистрироваться на событие $scope $ destroy и вызвать свой cleanUpFunc из него.

Смотрите документацию

Пример Кода:

   angular.module("TestApp")
      .controller("TestCtrl",function($scope,$rootScope){
        var cleanUpFunc = $scope.$on('testListener', function() {
          //write your listener here
        });

       //code for cleanup
       $scope.$on('$destroy', function() {
         cleanUpFunc();
        };      
    })

$scope.$on возвращает функцию, которую можно вызвать для отмены регистрации.