Как отвязать $watch() в angularJS
В angularJS мы можем отслеживать изменение данных с помощью наблюдателя $scope.$watch().
Первый параметр метода $watch — это выражение, возвращающее значение, изменение которого нужно наблюдать. А второй параметр — функция-listener, которая будет выполняться при каждом изменении наблюдаемого значения.
Например:
$scope.chicks = 0; $scope.$watch('chicks', function(newChicks) { alert('I have ' + newChicks + ' chicks'); }); $scope.autumnHasCome = function() { $scope.chicks++; };
В данном случае при каждом вызове функции autumnHasCome() будет происходить увеличение количества цыплят, а вместе с тем будет срабатывать alert.
Но что если после определенного количества цыплят мы хотим перестать выводить alert?
Мы можем отвязать listener, воспользовавшись функцией дерегистрации (deregistration):
var unbind = $scope.$watch('chicks', function(newChicks) { alert('I have ' + newChicks + ' chicks'); if (newChicks == 25) { unbind(); } });
При вызове метода $watch возвращается deregistration function, которой мы в последствии можем воспользоваться для отвязывания listener.