Подтвердить что ты не робот

$ watch запускается сразу после init, почему?

Почему $watch запускается сразу после загрузки страницы и как я могу предотвратить это?

http://jsfiddle.net/dcSRu/2/

function MyCtrl($scope) {
    // Init scope vars
    $scope.data_copy = {};

    // If data_copy changes...
    $scope.$watch("data_copy", function(newValue, oldValue) {

        alert("$watch triggered!");

    }, true);
}
4b9b3361

Ответ 1

При первом запуске оба значения (newValue и oldValue) равны, поэтому вы можете легко избежать этого, проверив равенство:

$scope.$watch("data_copy", function(newValue, oldValue) {
  if(newValue === oldValue){
    return;
  }
  alert("$watch triggered!");
});

PLUNKER

Ответ 2

Функция Wrap $watch в функции готовности angular.

angular.element(document).ready(function() 
{ 
  $scope.$watch("data_copy", function(newValue, oldValue) {
    alert("$watch triggered!");
  }, true);
})

Когда angular загружает страницу. Он изменяет значения и запускается $watch.