Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将AngularJS唯一表单字段指令重构为非阻塞_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript 将AngularJS唯一表单字段指令重构为非阻塞

Javascript 将AngularJS唯一表单字段指令重构为非阻塞,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我使用AngularJS 1.2指令检查表单字段是否唯一,方法是使用模型数据发出$http请求并检查响应 但是,当它处理请求时,它会阻止任何其他后续请求,并且当当前模型不唯一时,它也会为之前的请求注册成功 除了检查表单字段模糊的唯一性之外,我不确定如何纠正这个问题,这并不是我希望实现的交互。有什么重构的建议吗 .directive('unique', ['$http', '$timeout', function( $http, $timeout ) { var pro

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

你能用1.3或1.4吗?AngularJS通过ngModel及其控制器改进了对异步表单验证器的支持。我不确定这是否是您的问题,但请尝试将“var processing=null;”移动到链接函数中,否则它将对您的指令的所有实例都是通用的。即使这没有引起你的问题,我也可以看到它会引起其他问题。嗨@pixelbits,这实际上是一个9个月项目的结束,这是最后的错误修复,否则我肯定会尝试更新。如果不是唯一的,唯一会抛出错误吗?或者该方法是否返回true/false?如果是后者,我怀疑您没有正确处理响应hi@FoxMulder900,是的,这不会解决我的问题,但谢谢,这是一个非常好的观点。我刚刚做了更新。