Angularjs + 禁用和启用提交按钮

RSK*_*KMR 4 javascript validation angularjs

我有这样的示例代码:

html代码:

<body ng-controller="MainCtrl">
    <form name="myForm">
      <input name="myText" type="text" name="test" ng-model="mytext" required />
      <button ng-click="save()" ng-disabled="myForm.$invalid">Save</button>
    </form>
  </body>
Run Code Online (Sandbox Code Playgroud)

JS代码:

var app = angular.module('angularjs-starter', []);

app.controller('MainCtrl', function($scope) {
  $scope.name = 'World';

  $scope.save = function(){
    //logic or http method
    console.log("Test");
  }
});
Run Code Online (Sandbox Code Playgroud)

在此链接中附上代码:单击此处

逻辑:

  1. 默认保存按钮已禁用。
  2. 进入表单后启用按钮。
  3. 再次保存后禁用保存按钮。
  4. 再次用户输入文本需要启用保存按钮。

注意:这里我只附加了一个输入,但我有多个输入字段。另外,在保存功能中,我将逻辑数据保存到数据库中。

dot*_*tom 5

您可以使用$pristine来确定表单是否有任何更改,然后才启用按钮:

<body ng-controller="MainCtrl">
    <form name="myForm">
        <input name="myText" type="text" name="test" ng-model="mytext" required />
        <button ng-click="save(myForm)" ng-disabled="myForm.$invalid || myForm.$pristine">Save</button>
    </form>
</body>
Run Code Online (Sandbox Code Playgroud)

注意如何$pristine使用ng-disabled

ng-disabled="myForm.$invalid || myForm.$pristine"
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果表单无效或表单没有更改,则按钮将被禁用。

如果您使用这种方法,您还需要在保存数据后将表单设置为原始状态。您可以使用方法$setPristine

$scope.save = function(myForm) {
    // set form to pristine
    myForm.$setPristine();
}
Run Code Online (Sandbox Code Playgroud)

请注意,有一个表单参数用于将表单传递给该方法。在 HTML 中,您还需要将此参数作为以下内容的一部分传递ng-click

ng-click="save(myForm)"
Run Code Online (Sandbox Code Playgroud)

这是演示功能的 JSFiddle

有关更多信息,请查看FormController 的文档