首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular Asynchronous Validator未调用后端

Angular Asynchronous Validator未调用后端
EN

Stack Overflow用户
提问于 2017-01-24 08:38:32
回答 1查看 24关注 0票数 1

我正在尝试创建一个指令,该指令将异步调用我的后端,以查看给定的客户是否已经在数据库中,并报告该表单域是否有效。

代码语言:javascript
复制
function getCustomerValidationDirectiveFunc(){
return {
    restrict: "A",
    require: "ngModel",
    link: function(scope, element, attr, ngModel){
        var serverAddr = '/validate/customer/'

        ngModel.$validators.invalidUsername = function(modelValue, viewValue) {
            // validation logic here
            var username = modelValue || viewValue;
            var deferred = $q.defer();

            // ask the server if this username exists
            $http.get(serverAddr+username).then(
              function(response) {
                  console.log("RESPONSE RECEIVED FROM SERVER")
                if (response.data.exists) {
                  deferred.reject();
                } else {
                  deferred.resolve();
                }
              });

            // return the promise of the asynchronous validator
            return deferred.promise;
          }
    }
    }
}

app.directive('customerValidator', ['$http', '$q', getCustomerValidationDirectiveFunc()]);

下面是我的HTML代码:

代码语言:javascript
复制
<p><input type="text" ng-model="customer.customer_id" required customer-vlidator ng-model-options="{updateOn: 'default blur', debounce: {default: 500, blur: 0}}"></input></p>

我希望输入在500ms延迟(去抖动)后检查任何输入,并对我的后端进行异步调用,以便在客户已经存在于数据库中的情况下将该字段设置为无效...我甚至没有在我的网络选项卡上看到HTTP调用...那么为什么这不起作用?

EN

回答 1

Stack Overflow用户

发布于 2017-01-24 16:55:21

这是我最后想到的.我认为主要的问题是以正确的顺序将$q传递给函数。($q.defer不是函数)以及$http.get().then()回调中的if语句。它是response.data.exist,我将其更改为response.data === false,并从我的验证端点返回true或false。

JAVASCRIPT

代码语言:javascript
复制
app.directive('customerValidator', ['$q','$http', function($q, $http){
return {
    restrict: "A",
    require: "ngModel",
    link: function(scope, element, attr, ngModel){
        var serverAddr = '/validate/customer/'

        ngModel.$asyncValidators.invalidCustomer = function(modelValue, viewValue) {
            // validation logic here
            var customer = viewValue || modelValue;
            var deferred = $q.defer();

            // ask the server if this username exists
            $http.get(serverAddr+customer).then(
              function(response) {
                if (response.data === false) {
                  deferred.reject();
                } else {
                  deferred.resolve();
                }
              });

            // return the promise of the asynchronous validator
            return deferred.promise;
          }
    }
}}]);

HTML

代码语言:javascript
复制
<input type="text" ng-model="customer.customer_id" required customer-validator ng-model-options="{updateOn: 'default blur', debounce: {default: 500, blur: 0}}"></input>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41818150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档