Angularjs $setValidity 设置为 false 时不会阻止表单提交。这里有什么问题吗?
Angularjs $setValidity is not blocking Form Submission when set to false.. whats wrong here?
我有一个指令 "ensureUniqueValidator" 用于检查数据库中值的唯一性。该功能是通用的。它在 HTML 页面中按以下方式调用:
<input type="email" name="email" ng-model="userCtrl.user.email"
required ensure-unique-validator />
指令代码:
app.directive('ensureUniqueValidator', [
'$http',
function($http) {
return {
restrict : 'A',
require : 'ngModel',
link : function(scope, ele, attrs, c) {
c.$parsers.push(function(val) {
return $http.get(
'MainServlet.do?method=is' + attrs.name
+ 'unique&' + attrs.name + '='
+ val).then(
function(result) {
console.log(result.data);
c.$setValidity('ensureUniqueValidator',
result.data);
return result.data;//returns true or false
});
});
}
}
} ]);
问题是,即使服务器返回 False,表单仍然有效。看起来,$setValidity 函数并未使表单无效。
我是不是做错了什么?提前致谢。
这应该可行(无论如何,根据文档,我还没有写过其中之一)。
主要的事情似乎是承诺应该 resolve 一个有效值或 reject 一个无效值。
// don't forget to inject the $q service
c.$asyncValidators.ensureUniqueValidator = function(modelValue, viewValue) {
if (ctrl.$isEmpty(modelValue)) {
// consider empty model valid
return $q.when();
}
var params = {
method: 'is' + attrs.name + 'unique'
};
params[attrs.name] = modelValue;
return $http.get('MainServlet.do', {
params: params
}).then(function(response) {
if (!response.data) {
return $q.reject();
}
return true;
});
};
我有一个指令 "ensureUniqueValidator" 用于检查数据库中值的唯一性。该功能是通用的。它在 HTML 页面中按以下方式调用:
<input type="email" name="email" ng-model="userCtrl.user.email"
required ensure-unique-validator />
指令代码:
app.directive('ensureUniqueValidator', [
'$http',
function($http) {
return {
restrict : 'A',
require : 'ngModel',
link : function(scope, ele, attrs, c) {
c.$parsers.push(function(val) {
return $http.get(
'MainServlet.do?method=is' + attrs.name
+ 'unique&' + attrs.name + '='
+ val).then(
function(result) {
console.log(result.data);
c.$setValidity('ensureUniqueValidator',
result.data);
return result.data;//returns true or false
});
});
}
}
} ]);
问题是,即使服务器返回 False,表单仍然有效。看起来,$setValidity 函数并未使表单无效。
我是不是做错了什么?提前致谢。
这应该可行(无论如何,根据文档,我还没有写过其中之一)。
主要的事情似乎是承诺应该 resolve 一个有效值或 reject 一个无效值。
// don't forget to inject the $q service
c.$asyncValidators.ensureUniqueValidator = function(modelValue, viewValue) {
if (ctrl.$isEmpty(modelValue)) {
// consider empty model valid
return $q.when();
}
var params = {
method: 'is' + attrs.name + 'unique'
};
params[attrs.name] = modelValue;
return $http.get('MainServlet.do', {
params: params
}).then(function(response) {
if (!response.data) {
return $q.reject();
}
return true;
});
};