directive做过滤器要人性化很多,但是如果是简单的过滤也可以使用filter来做,设置一个全局变量保存数据验证结果,等到提交表单的时候验证全局变量就可以了:
.directive("myFilter",function(){ var css = { _valid:function(ele){ ele.removeClass("ng-invalid"); ele.next().removeClass("hide"); ele.next().removeClass("input_remove"); ele.next().removeClass("glyphicon-remove"); ele.addClass("ng-valid"); ele.next().addClass("input_ok"); ele.next().addClass("glyphicon-ok"); }, _invalid:function(ele){ ele.removeClass("ng-valid"); ele.next().removeClass("input_ok"); ele.next().removeClass("glyphicon-ok"); ele.addClass("ng-invalid"); ele.next().addClass("input_remove"); ele.next().addClass("glyphicon-remove"); } }; return { require:'ngModel', link:function(scope,ele,arrts){ scope.$watch(arrts.ngModel,function(newVal,oldVal){ if(typeof newVal != "undefined"){ css._valid(ele); if(typeof arrts.type != "undefined"){ switch (arrts.type){ case 'text': if(typeof newVal != "string"){ css._invalid(ele); } if(typeof arrts.min != "undefined"){ if(newVal.length < arrts.min){ css._invalid(ele); } } if(typeof arrts.max != "undefined"){ if(newVal.length > arrts.max){ css._invalid(ele); } } break; case 'number2': var filter = /^[0-9]+.?[0-9]*$/; if(!filter.test(newVal)){ css._invalid(ele); } if(typeof arrts.min != "undefined"){ if(newVal < parseInt(arrts.min)){ css._invalid(ele); } } if(typeof arrts.max != "undefined"){ if(newVal > parseInt(arrts.max)){ css._invalid(ele); } } break; case 'email2': var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; if(!filter.test(newVal)){ css._invalid(ele); } break; } } } }); } }; }) .filter('email2',function(){ //感觉这个不人性化,也可能是我不会用吧 return function(input,length){ if(typeof input == "undefined" || length < input.length){ //c("输入不合规"); } return input; } })
下面是style的代码:
input.ng-invalid { border: 1px solid red; } input.ng-valid { border: 1px solid green; } .input_ok{ position: absolute; z-index: 100; right: 1%; top: 8px; color: #299429; } .input_remove{ position: absolute; z-index: 100; right: 1%; top: 8px; color: #ff0000; } .form-contant p{ position: relative; }
下面是表单html的代码:
<div class="form-contant"> <h1>Register</h1> <p> <input type="text" ng-model="user_name" placeholder="请输入用户名" class="form-control" my-filter data="{{user_name|email2:4}}" min="4" max="20"> <i class="glyphicon glyphicon-ok hide"></i> </p> <p> <input type="text" ng-model="user_pwd" placeholder="请输入密码" class="form-control" my-filter min="4" max="20"> <i class="glyphicon glyphicon-ok hide"></i> </p> <p> <input type="number2" ng-model="age" placeholder="请输入年龄" class="form-control" my-filter min="4" max="102"> <i class="glyphicon glyphicon-ok hide"></i> </p> <p> <input type="email2" ng-model="email" placeholder="请输入邮箱" class="form-control" value="" my-filter min="6" max="50"> <i class="glyphicon glyphicon-ok hide"></i> </p> <br> <button type="button" class="form-control" ng-click="get()">get</button> <button type="button" class="form-control" ng-click="save()">save</button> <button type="button" class="form-control" ng-click="put()">put</button> </div>
近期评论