使用AngularJS观看整个对象(深度观察)

ses*_*ses 8 javascript angularjs

这是angular-resource variable / object表示表单数据的范围:

    $scope.form = {
              name: 'bob', 
              email: 'bob@bobs.com'
    }
Run Code Online (Sandbox Code Playgroud)

我可以通过各种方式观察name变量的变化.

    $scope.$watch('form.name', function(newVal) {
        if(newVal) {
            alert(newVal)
        }
    });
Run Code Online (Sandbox Code Playgroud)

如果更改了任何文件,可以使用什么方法 - 名称,电子邮件或任何scope.form可能有的?

我的目的是根据用户在表单上更改某些内容的事实禁用或启用我的表单"保存".

m59*_*m59 22

还有第三个参数$watch()可以检查对象是否相等(深度监视).

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

为了进一步完善我的答案,这两种方法在这种情况下产生相同的结果:在这里进行现场演示(点击).但是$watchCollection很浅,不会看任何嵌套的变化.

  $scope.$watch('form', function(newForm, oldForm) {
    console.log(newForm.name);
  }, true);
Run Code Online (Sandbox Code Playgroud)

或者:( 不是深表)

  $scope.$watchCollection('form', function(newForm, oldForm) {
    console.log(newForm.name); 
  });
Run Code Online (Sandbox Code Playgroud)