我正在使用此AngularJS 1.2指令通过使用模型数据发出$ http请求并检查响应来检查表单字段是否唯一。
但是,当它处理请求时,它会阻止任何其他后续请求,并且当当前模型不唯一时,它也会为该先前请求注册成功。
我不确定这是多么正确,除了通过检查表单字段模糊的唯一性,这不是我希望实现的交互。有没有重构这个的建议?
.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 );
});
}
};
}]);