Javascript 角度AJAX验证器。在验证过程中防止提交的最佳方法?
对于角度形式,很容易看出形式是$valid还是$invalid。这很好,我只允许用户提交$valid的表单 但是,有没有一种简单的方法表明它正在验证过程中?我们不清楚它是有效的还是无效的 如果您正在检查电子邮件地址是否有效,这是可取的。在AJAX调用返回之前,我不想将该字段标记为$invalid,否则我可能会在没有错误的情况下向用户显示错误。但我不希望他们能够提交,如果我们仍然在检查电子邮件地址 有什么建议吗 我用于AJAX验证器的代码基于@BenLeshJavascript 角度AJAX验证器。在验证过程中防止提交的最佳方法?,javascript,ajax,angularjs,validation,Javascript,Ajax,Angularjs,Validation,对于角度形式,很容易看出形式是$valid还是$invalid。这很好,我只允许用户提交$valid的表单 但是,有没有一种简单的方法表明它正在验证过程中?我们不清楚它是有效的还是无效的 如果您正在检查电子邮件地址是否有效,这是可取的。在AJAX调用返回之前,我不想将该字段标记为$invalid,否则我可能会在没有错误的情况下向用户显示错误。但我不希望他们能够提交,如果我们仍然在检查电子邮件地址 有什么建议吗 我用于AJAX验证器的代码基于@BenLesh function linkFunc(s
function linkFunc(scope, el, attr, ctrl) {
// When the scope changes, check the email.
scope.$watch(attr.ngModel, validate);
function validate (value)
{
// Show as valid until proven invalid
ctrl.$setValidity('validateEmail', true);
// if there was a previous attempt, stop it.
if(timeoutId) {
clearTimeout(timeoutId);
}
timeoutId = setTimeout(function() {
// Make $http call and $setValidity
$http.get(url)
.then(function(data) {
ctrl.$setValidity('validateEmail', data.isValid);
});
}, 200);
}
}
可以在处理ajax请求时禁用该按钮。您也可以使用fieldset来查看手册中的类似逻辑 那么在你看来,
<button ng-disabled="waitingForAjax" ../>
谢谢-很明显的答案。我对它做了一些调整,改为设置ctrl.validating=true。然后在我看来,我会检查vm.formName.emailFieldName.validating vm,就像我使用controllerAs:vm一样。谢谢,您还可以使用$http.pendingRequests来检查全局是否存在任何挂起的请求。它可能在将来对你很方便。
<button ng-disabled="waitingForAjax" ../>