2013-11-29 10 views
6

Jest to zakres angular-resource variable/object który reprezentuje dane formularza:Zobacz cały obiekt (głęboki watch) z angularjs

$scope.form = { 
       name: 'bob', 
       email: '[email protected]' 
    } 

Jest sposób patrzę gdzie moja zmienna name ulega zmianie.

$scope.$watch('form.name', function(newVal) { 
     if(newVal) { 
      alert(newVal) 
     } 
    }); 

Jaki byłby sposób na oglądanie, jeśli którykolwiek z fileds była nazwa changed-, email, lub cokolwiek scope.form może mieć?

Moim celem, aby mój formularz "save" był wyłączony lub włączony w zależności od faktu, że użytkownik zmienił coś w formularzu.

+1

zobacz $ watchCollection http://docs.angularjs.org/api/ng.$rootScope.Scope –

+0

To w orks (także). – ses

Odpowiedz

15

Istnieje trzeci parametr z $watch(), który sprawi, że sprawdzi on równość obiektu (deepwatch).

$scope.$watch('form', function(newVal) { //watch the whole object 
     if(newVal) { 
      alert(newVal); 
     } 
    }, true); //pass "true" here. 

Aby dodatkowo wypełnić moją odpowiedź, oba te podejścia dają ten sam rezultat w tym przypadku: Live demo here (click). ale $watchCollection jest płytkie i nie będzie oglądać niczego zagnieżdżony zmian.

$scope.$watch('form', function(newForm, oldForm) { 
    console.log(newForm.name); 
    }, true); 

OR: (nie głęboko zegarek)

$scope.$watchCollection('form', function(newForm, oldForm) { 
    console.log(newForm.name); 
    }); 
+0

Jaki jest cel linii 'if (newVal) {'? Czy funkcja nie powinna być wykonywana tylko wtedy, gdy istnieje nowa wartość? – adelriosantiago

+1

@adelriosantiago Tak, ale nowa wartość może być "niezdefiniowana" dla pierwszego cyklu trawienia. To pytanie i moja odpowiedź są tego przykładem. https://stackoverflow.com/q/25723455/1435655 – m59

Powiązane problemy