重构AngularJS独特形式字段指令是非阻塞的

时间:2015-05-27 06:55:42

标签: javascript angularjs angularjs-directive

我正在使用此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 );
                });
            }
        };
}]);

0 个答案:

没有答案