观察表单模型的变化

Dun*_*can 11 forms angularjs angularjs-watch

假设一个给定的形式<form name="myForm">,使用一个简单的手表很容易观察有效性,错误,脏状态等:

$scope.$watch('myForm.$valid', function() {
  console.log('form is valid? ', $scope.myForm.$valid); 
});
Run Code Online (Sandbox Code Playgroud)

但是,如果此表单中的任何给定输入已更改,则似乎没有简单的方法可以观察.如此深入观察,不起作用:

$scope.$watch('myForm', function() {
  console.log('an input has changed'); //this will never fire
}, true);
Run Code Online (Sandbox Code Playgroud)

$watchCollection只有一个深度,这意味着我必须为每个输入创建一个新的手表.不理想.

什么是优雅的方式来观看表单以便在任何输入上进行更改而无需借助多个手表或放置ng-change每个输入?

Don*_*uwe 7

关于可能的重复和您的评论:

该问题中的指令解决方案有效,但它不是我的想法(即不优雅,因为它需要模糊才能工作).

如果你true为你的第三个参数添加它$watch:

$scope.$watch('myFormdata', function() {
    console.log('form model has been changed');
}, true);
Run Code Online (Sandbox Code Playgroud)

更多信息请参阅文档.

工作小提琴(查看控制台日志)


另一种更有棱角的方式是使用角度$pristine.false操作表单模型后,此布尔属性将设置为:

小提琴