angularjs中的表单更改和有效性

时间:2014-03-27 17:52:08

标签: javascript angularjs forms angularjs-validation

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

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

但如何在控制器中访问form.$invalid$scope中未包含该内容?)

2 个答案:

答案 0 :(得分:3)

您应该可以通过

访问form.$invalid
$scope.form.$invalid

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

要观察表单中的更改,您应该可以:

$scope.$watchCollection('input')

答案 1 :(得分:2)

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

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

$scope.forms = {};

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

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

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

if($scope.forms.someForm.$invalid) {
    ...
}