每当表单中的任何非只读输入发生更改且表单有效时,我都想执行某些操作。假设我的表格看起来像

<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.ainput.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')

07-24 09:50
查看更多