2014-09-18 62 views
17

我有一个应用程序与长表单页面中的很多设置。您需要前往页面查看当前设置或更新它们。AngularJS:启用按钮上的表单输入更改

我想这样做只有当有人实际改变当前输入时才启用“更新”按钮。

我幼稚的做法是一个NG-改变属性添加到每一个设置enableButton标志

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

输入但这似乎繁琐和重复(我们有很多的选择),并希望一些简单的东西(如“form。$ hasChanged”...)

回答

36

而不是设置一个标志n改变窗体的任何输入,你应该使用窗体控制器对象中$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" /> 
+6

那么,如果用户实际上使表单$ dirty,然后删除更改,会怎么样。是否可以在启用按钮之前检查字段中是否实际存在更改 – Flash 2017-05-24 14:05:53

+0

@Flash是否在此获得答案? – 2017-07-05 15:48:59

+1

@HimalayMajumdar我结束了安装这个库: https://github.com/betsol/angular-input-modified 它perferctly它的工作 – Flash 2017-07-07 05:34:54

相关问题