Как отвязать $в угловой?
У меня есть код, который использует $scope.$on один раз на init, а затем в функции, поэтому код выполняется несколько раз. Как я могу развязать, если сначала, прежде чем я свяжу его снова. Я попробовал $ scope.$ выкл, но там нет такой функции, docs.angularjs.org/api ничего не говори о $on. Я использую угловой 1.0.6.
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(); }; })