$ 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);
}
Ответы
Ответ 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.
Ответ 3
Здесь уже есть очень приятное обсуждение:
Как игнорировать начальную загрузку при просмотре изменений модели в AngularJS?
$scope. $watch ('fieldcontainer', function (new_fieldcontainer, old_fieldcontainer) {
if (typeof old_fieldcontainer === 'undefined') return;
//Другой код для обработки измененного объекта здесь.
});