3

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

<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">

但我怎样才能访问form.$invalid控制器(它不包含在$scope)?

4

2 回答 2

3

您应该可以form.$invalid通过执行访问

$scope.form.$invalid

见这里:AngularJs can't access form object in controller ($scope)

要观察表单的变化,您应该能够:

$scope.$watchCollection('input')
于 2014-03-27T18:00:11.123 回答
2

@dave 已经回答了您的第一个问题,但是对于第二个问题,我有一个我认为更优雅的解决方案:

在您的控制器中,您已经声明了一个对象,例如:

$scope.forms = {};

然后您的表单名称必须嵌套在该对象内:

<form name="forms.someForm">
    ...

最后在您的控制器中,您可以执行以下操作:

if($scope.forms.someForm.$invalid) {
    ...
}
于 2014-09-14T19:16:18.903 回答