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

时间:2016-09-06 21:06:37

标签: angularjs forms validation server-side

我已跟踪this answer为唯一电子邮件约束运行自定义服务器端验证。

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

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>

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

2 个答案:

答案 0 :(得分:0)

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

从角度documentation

  

$ setPristine(); 将表单设置为原始状态。

     

此方法将表单的$ pristine状态设置为true,即$ dirty状态   为false,删除ng-dirty类并添加ng-pristine类。   此外,它将$ submitted状态设置为false。

     

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

     

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

答案 1 :(得分:0)

以下是来自@ code90的解决方案:

我需要在ng-change="form.$valid=true"

中添加<input type="email"..

它工作正常!