Angular 1.2.1中的$ setPristine()方法似乎没有按预期工作

时间:2013-11-15 20:42:44

标签: javascript angularjs dom

我正在尝试使用AngularJS中的$setPristine函数重置文本框,但它似乎不会产生所需的行为。

我的表单如下:

<form name="addInviteForm" ng-controller="InviteCtrl" ng-submit="sendInvitation(userEmail)">

      Pristine? {{addInviteForm.$pristine}}

      <!-- email input -->
      <div>
        <input type="email" name="email" ng-model="userEmail" placeholder="Enter email here"  class="line-item-input see" required>
        <span class="error" ng-show="addInviteForm.email.$error.email" style="color:red">Invalid Email</span>
      </div>

      <!-- submit button -->
      <input type="submit" name="send" class="btn btn-success center" value="Send Invitation">
</form>

我控制器中的相应代码:

$scope.sendInvitation = function(userEmail) {

        // do some work here ...

        // hmm, this doesn't seem to work ...
        $scope.addInviteForm.$setPristine();
    };

虽然表单显示表单输入时$pristine设置为true,但在文本框中输入数据时设置为false,提交表单后确实会显示$pristine设置为true ....但文本框中的值仍然保持按下提交按钮之前的值。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:7)

$setPristine不会清除表单中控件的值:

来自the docs

  

将表单设置为其原始状态。

     

可以调用此方法来删除'ng-dirty'类并设置   形成其原始状态(ng-pristine类)。这种方法也会   传播到此表单中包含的所有控件。

     

在我们需要时,将表单设置回原始状态通常很有用   保存或重置表单后“重复使用”表单。

从上面的描述中可以看出,$setPristine只更改了表单的状态(从而重置了应用于表单中每个控件的css)。

如果要清除每个控件的值,则需要为每个代码执行操作。

This plunker显示$setPristine正在投放。