我已跟踪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以尝试再次提交表单?
答案 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"..
它工作正常!