2016-06-10 62 views
0

如果数字已经存在于后端,但是它显示每个数字的验证,那么是否存在在后端还是没有。如果在后端不存在,则显示我的登录表单的验证

下面是一个代码示例:

HTML

<div class="col-xs-8"> 
    <md-input-container> 
     <md-icon md-svg-icon="assets/images/device.svg"></md-icon> 
     <input type="number" placeholder="Enter user mobile no" name=mobile" id="mobile" ng-model="mobile" required minlength="10" ng-pattern="/^[789]\d{9}$/" phone-number-validator> 
     <div ng-messages="myForm.mobile.$error"> 
      <div ng-message="required">Registered mobile no.</div> 
      <div ng-message="phoneNumber">The mobile No entered has already been registered</div> 
      <div ng-message="test">too short</div> 
     </div> 
    </md-input-container> 
</div> 

指令

angular.module('shoppingPad').directive('phoneNumberValidator',phoneNumberValidator) 


function phoneNumberValidator($q,loginServices,restService){ 
    var deferred=$q.defer(); 
    return{ 
     restrict:'EA', 
     require:'ngModel', 

     link:function($scope,element,attrs,ngModel){ 
      ngModel.$asyncValidators.phoneNumber=function(modelValue , viewValue) { 

       var mobile= (modelValue || viewValue).toString(); 
        console.log(typeof mobile); 
        if(mobile.length == 10){ 

         console.log('mobile 2' + typeof loginServices.getMobileNo()); 

         return restService.getRequest('save/all?m='+mobile).then(function(response){ 
          console.log("inside rest"); 
          deferred.reject(response.status); 
          return deferred.promise; 


         },function(error){ 

          return deferred.promise; 
         }); 

        } 

      } 
     } 


    } 

} 

服务

angular.module('shoppingPad').service('restService',restService); 

function restService($http){ 
    var port=4005; 
    var baseUrl="http://localhost:"+port; 

    this.getRequest=function(path,query){ 
     console.log("we are in the getRequest"); 
     var def=$http.get(baseUrl+"/"+path,query); 
     console.log(def) 
     return def; 
    }; 
} 

nodejs 
router.get('/all',function(req,res){ 
console.log("abcd"); 
var mobile=(req.query.m) 

console.log(typeof mobile); 
console.log(mobile) 
user.all(mobile,function(error,data){ 
    if(error){ 
     res.send(error) 
    }else{ 
     res.send(data) 
    } 
}) 

});

UserList.prototype.all =函数(移动,CB){

User.find({mobile:mobile},function(err,data){ 
    if(data){ 
     console.log(data); 
     return cb(null,data) 
    } 
    else{ 
     return cb(err,null); 
    } 
}); 

};

+0

你在哪里通过你的模型ID为不同的结果?我看到的是,你使用相同的网址和参数为您的所有模型... – eenagy

+0

在我的nodejs代码我匹配从前端传递到数据库中存在的移动号码。如果不存在数据库中它会显示验证,否则不是 – Anurag

+0

我没有使用模型ID验证应该基于独特的移动没有​​ – Anurag

回答

1

好的。弄清楚了。

您需要在asyncValidator中创建promise,否则您只会对所有的ngModel s进行验证。

第二个错误是返回请求的承诺,这将始终由$ http服务解析/拒绝。

angular.module('shoppingPad').directive('phoneNumberValidator', phoneNumberValidator) 


function phoneNumberValidator($q, loginServices, restService) { 
    return { 
     restrict: 'EA', 
     require: 'ngModel', 

     link: function ($scope, element, attrs, ngModel) { 
      ngModel.$asyncValidators.phoneNumber = function (modelValue, viewValue) { 
       var deferred = $q.defer(); 

       var mobile = (modelValue || viewValue).toString(); 
       if (mobile.length === 10) { 
        restService.getRequest('save/all?m=' + mobile).then(function (response) { 
         if (response.status === 'mobile already exist') { 
          deferred.reject(response.status) 
         } 
         else { 
          deferred.resolve(); 
         } 

        }, function (error) { 
         //todo reject or resolve 
         return deferred.promise; 
        }); 

       } else { 
        //no validation error if length is not 10 
        deferred.resolve(); 
       } 
       return deferred.promise; 
      } 
     } 


    } 

} 
+0

response.status ==='移动不存在'??? – Anurag

+0

只是为了接通手机存在与否而存在,即使不存在,您也会始终从服务器返回响应,对吗? – eenagy

+0

我已经添加了我的nodejs代码,请检查它并告诉我我要去哪里出错 – Anurag

相关问题