每当表单中的任何非只读输入发生更改且表单有效时,我都想执行某些操作。假设我的表格看起来像
<form name="form" novalidate>
<input ng-model='input.a' required/>
<input ng-model='input.b' required/>
<input value='{{output.p | number: 2}}' readonly/>
<input value='{{output.q | number: 2}}' readonly/>
</form>
现在对
input
进行任何更改后,只要input.a
和input.b
有效,我都想做些事情。我尝试了$watch(input)
,但是没有用。看着它的所有成员都可以,但是感觉很愚蠢。向所有字段添加ng-change
感觉更好,但是仍然很愚蠢(非DRY)。正确的方法是什么?另一个问题是如何找出输入是否有效。如果我有一个按钮,我可以简单地做
<button ng-click="doIt()" ng-disabled="form.$invalid">
但是如何在 Controller 中访问
form.$invalid
(它不包含在$scope
中)? 最佳答案
您应该可以通过以下操作访问form.$invalid
$scope.form.$invalid
看到这里:AngularJs can't access form object in controller ($scope)
要监视表单中的更改,您应该能够:
$scope.$watchCollection('input')