2013-11-29 60 views
6

這是一個範圍angular-resource variable/object表示表單數據:觀看整個對象(深手錶)與AngularJS

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

還有就是我看的方式在那裏我name變量發生改變。

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

什麼會看,如果任何的Fileds的是更改─姓名,電子郵件,或任何scope.form可有辦法?

我的目的是根據用戶在表單上改變了某個事實來使我的表單'保存'被禁用或啓用。

+1

看看$ watchCollection http://docs.angularjs.org/api/ng.$ro​​otScope.Scope –

+0

那w orks(也)。 – ses

回答

15

有第三個參數$watch(),這將使它檢查對象相等(深觀察)。

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

爲了進一步完成我的答案,這兩種方法產生相同的結果在這種情況下:Live demo here (click).$watchCollection很淺,不會看任何嵌套更改。

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

OR:(不是深手錶)

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

該行的用途是什麼?if(newVal){'?不應該只有當有新值時才執行該功能? – adelriosantiago

+1

@adelriosantiago是的,但是對於第一個摘要循環,新值可能是「未定義的」。這個問題和我的答案也是這樣的一個例子。 https://stackoverflow.com/q/25723455/1435655 – m59

2

由於AngularJS 1.1.x中在對象的陣列或屬性觀看多個值的優選方式是$ watchCollection http://docs.angularjs.org/api/ng.$rootScope.Scope

$scope.$watchCollection('form', function(newValues, oldValues) { 
    console.log('*** Watch has been fired. ***'); 
    console.log('New Names :', newValues);} 
);