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

时间:2013-11-29 02:31:21

标签: javascript angularjs

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

    $scope.form = {
              name: 'bob', 
              email: 'bob@bobs.com'
    }

我可以通过某种方式观察name变量的更改位置。

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

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

我的目的是制作我的表格' save'禁用或启用,具体取决于用户在表单上更改了某些内容。

2 个答案:

答案 0 :(得分:20)

$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);

或者:(不是深刻观察)

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

答案 1 :(得分: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);}
);