AngularJS:在表单输入更改时启用按钮

时间:2014-09-18 23:35:26

标签: javascript angularjs forms

我的应用程序在长格式页面中有很多设置。您需要转到页面以查看当前设置或更新它们。

我想这样做,以便"更新"按钮仅在某人实际更改当前输入时启用。

我天真的方法是为每个设置enableButton标志的输入添加ng-change属性

<form name='form' ng-submit="submit()">
   <input type="sometype" ng-model='something1' ng-change="formChanged=true"></input>
   ...
   <input ng-model='somethingN' ng-change="formChanged=true"></input>
   <button ng-disabled="!formChanged" type="submit" />
</form>

但这看起来很乏味和重复(我们有很多选择),并希望有一些简单的东西(例如&#34;形式。$ hasChanged&#34; ...)

1 个答案:

答案 0 :(得分:39)

您应该使用窗体控制器对象上$dirty属性中内置的角度,而不是设置任何表单输入的标志。它告诉用户是否与表单的元素进行了交互。

<form name='form' ng-submit="submit()">
   <input name="some1" type="sometype" ng-model='something1' ></input>
   ...
   <input name="some2" ng-model='somethingN' ></input>
   <button ng-disabled="!form.$dirty" type="submit" />
</form>

使用$pristine标志,您可以

<button ng-disabled="form.$pristine" type="submit" />

同样,如果您在表单上有验证器,您也可以使用$valid属性,例如,如果表单无效或原始,则禁用该按钮

<button ng-disabled="form.$pristine|| form.$invalid" type="submit" />