Javascript 将AngularJS唯一表单字段指令重构为非阻塞
我使用AngularJS 1.2指令检查表单字段是否唯一,方法是使用模型数据发出$http请求并检查响应 但是,当它处理请求时,它会阻止任何其他后续请求,并且当当前模型不唯一时,它也会为之前的请求注册成功 除了检查表单字段模糊的唯一性之外,我不确定如何纠正这个问题,这并不是我希望实现的交互。有什么重构的建议吗Javascript 将AngularJS唯一表单字段指令重构为非阻塞,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我使用AngularJS 1.2指令检查表单字段是否唯一,方法是使用模型数据发出$http请求并检查响应 但是,当它处理请求时,它会阻止任何其他后续请求,并且当当前模型不唯一时,它也会为之前的请求注册成功 除了检查表单字段模糊的唯一性之外,我不确定如何纠正这个问题,这并不是我希望实现的交互。有什么重构的建议吗 .directive('unique', ['$http', '$timeout', function( $http, $timeout ) { var pro
.directive('unique', ['$http', '$timeout',
function( $http, $timeout ) {
var processing = null;
return {
restrict: 'A',
scope: {
ngModel: '=ngModel',
unique: '&'
},
require: 'ngModel',
link: function( $scope, $element, $attrs, ngModelCtrl ) {
// Watch change to model
$scope.$watch(function() {
return $scope.ngModel;
}, function( currentValue ) {
// Debounce before checking unique
if ( !processing && angular.isDefined( $scope.ngModel ) ) {
processing = $timeout(function() {
$scope.unique( { name: $attrs.name } )
.then(function( response ) {
// Set model validity based on result, allows use of $error.unique
ngModelCtrl.$setValidity('unique', response.data.isUnique);
processing = null;
}, function( error ) {
// Set model validity based on result, allows use of $error.unique
ngModelCtrl.$setValidity('unique', false);
processing = null;
});
}, 500);
}
});
$scope.$on( "$destroy", function( event ) {
$timeout.cancel( processing );
});
}
};
}]);
你能用1.3或1.4吗?AngularJS通过ngModel及其控制器改进了对异步表单验证器的支持。我不确定这是否是您的问题,但请尝试将“var processing=null;”移动到链接函数中,否则它将对您的指令的所有实例都是通用的。即使这没有引起你的问题,我也可以看到它会引起其他问题。嗨@pixelbits,这实际上是一个9个月项目的结束,这是最后的错误修复,否则我肯定会尝试更新。如果不是唯一的,唯一会抛出错误吗?或者该方法是否返回true/false?如果是后者,我怀疑您没有正确处理响应hi@FoxMulder900,是的,这不会解决我的问题,但谢谢,这是一个非常好的观点。我刚刚做了更新。