angularjs:用于检查用户名是否存在的自定义指令

前端之家收集整理的这篇文章主要介绍了angularjs:用于检查用户名是否存在的自定义指令前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的注册表格带有文本框用户名.我想要做的是当用户输入用户名时,custom指令将检查输入的用户名是否存在于数据库中.

directives.js

  1. angular.module('installApp').directive('pwCheck',function ($http) {
  2. return {
  3. require: 'ngModel',link: function (scope,elem,attrs,ctrl) {
  4. elem.on('blur',function (evt) {
  5. scope.$apply(function () {
  6. $http({
  7. method: 'GET',url: '../api/v1/users',data: {
  8. username:elem.val(),dbField:attrs.ngUnique
  9. }
  10. }).success(function(data,status,headers,config) {
  11. ctrl.$setValidity('unique',data.status);
  12. });
  13. });
  14. });
  15. }
  16. }
  17. });

如果它存在,我的div class =“invalid”将显示在html表单中,标签为“Username already exists”.

registration.html

  1. <form name = "signupform">
  2. <label>{{label.username}}</label>
  3. <input type="text" id = "username" name = "username" ng-model="user.username" class="form-control"></input>
  4. <div class="invalid" ng-show="signupform.username.$dirty && signupform.username.$invalid"><span ng-show="signupform.username.$error.unique">Username already exists.</span>
  5. </div>
  6. </form>

但是现在,他们没有工作:-(我做得对吗?请建议或建议我应该做的事情.提前谢谢.

在angular1.3中有一个关于$asyncvalidator的年份很好的 tutorial.它允许您在后端检查字段时轻松显示挂起状态:

这是plnkr的工作

  1. app.directive('usernameAvailable',function($timeout,$q) {
  2. return {
  3. restrict: 'AE',require: 'ngModel',link: function(scope,elm,attr,model) {
  4. model.$asyncValidators.usernameExists = function() {
  5.  
  6. //here you should access the backend,to check if username exists
  7. //and return a promise
  8. //here we're using $q and $timeout to mimic a backend call
  9. //that will resolve after 1 sec
  10.  
  11. var defer = $q.defer();
  12. $timeout(function(){
  13. model.$setValidity('usernameExists',false);
  14. defer.resolve;
  15. },1000);
  16. return defer.promise;
  17. };
  18. }
  19. }
  20. });

HTML:

  1. <form name="myForm">
  2. <input type="text"
  3. name="username"
  4. ng-model="username"
  5. username-available
  6. required
  7. ng-model-options="{ updateOn: 'blur' }">
  8. <div ng-if="myForm.$pending.usernameExists">checking....</div>
  9. <div ng-if="myForm.$error.usernameExists">username exists already</div>
  10. </form>

注意使用ng-model-options,1.3的另一个很酷的功能

编辑

这是一个plnkr,显示如何在指令中使用$http.请注意,它只是请求另一个包含true / false值的.json文件.并且该指令将相应地设置ng模型的有效性.

猜你在找的Angularjs相关文章