AngularJS - 更改字段后如何设置有效性 true

AngularJS - How to set validity true after change the field

提问人:Fernando Fradegrada 提问时间:9/7/2016 最后编辑:CommunityFernando Fradegrada 更新时间:9/9/2016 访问量:6932

问:

我按照这个答案运行自定义服务器端验证,以查找唯一的电子邮件约束。

这是我在控制器上的提交功能:

function submit(form){
  CompanyUser.save(vm.model)
      .success(function(data) {
          vm.closeModal();
          toastSucess(data);
      })
      .error(function(data) {
          if(data.code == 'error_duplicated_email')
              form['email'].$setValidity("uniqueEmail", false);
      });

}

这是我的电子邮件 HTML 代码:

<form name="form" novalidate ng-click="form.$valid && vm.submit(form)">
    <div class="form-group" ng-class="{ 'has-error': form.$submitted && form.email.$error.uniqueEmail }">
        <label>E-mail</label>
        <input type="email" class="form-control" name="email" ng-model="vm.model.email" required>
        <span ng-show="form.$submitted && form.email.$error.uniqueEmail" class="help-block">Duplicated e-mail</span>
    </div>
    <div class="modal-footer">
        <button type="button" class="btn btn-white" ng-click="vm.closeModal()">Cancel</button>
        <button type="submit" class="btn btn-primary">Save</button>
    </div>
</form>

一旦该服务器返回错误,就可以正常工作。但是,然后我更改了电子邮件并尝试提交,但我不能再这样做了。我认为这是因为我已将 .那么,如何设置为 true 以尝试再次提交表单呢?validityfalse

AngularJS 表单 验证服务器

评论

0赞 code90 9/7/2016
您还能包含提交按钮的代码吗?
0赞 Fernando Fradegrada 9/7/2016
我刚刚添加了表单代码和提交按钮代码。
0赞 code90 9/8/2016
您可能需要将ng-change="form.$valid=true"<input type="email"..
0赞 Fernando Fradegrada 9/9/2016
这很好用,伙计!干得好。

答:

0赞 Hugo Nakamura 9/7/2016 #1

您可以尝试使用该方法。$setPristine();

来自 angular 文档

$setPristine();将窗体设置为其原始状态。

此方法将窗体的$pristine状态设置为 true,即$dirty状态 如果为 false,则删除 ng-dirty 类并添加 ng-pristine 类。 此外,它还将$submitted状态设置为 false。

此方法还将传播到此包含的所有控件 形式。

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

评论

1赞 Fernando Fradegrada 9/7/2016
但是你会在哪里使用它呢?
0赞 Hugo Nakamura 9/8/2016
一旦该服务器返回错误,您是否会重置您的字段?
0赞 Fernando Fradegrada 9/9/2016 #2

以下是@code90的解决方案:

我需要添加一个ng-change="form.$valid=true"<input type="email"..

而且效果很好!

评论

0赞 coderman 1/21/2020
我需要设置该特定控件的有效性