Как отвязать $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.

Хотите быть в курсе новых статей?