当验证表单中有很多字段时,这时候可能希望把html的生成以及验证逻辑放到controller中,在页面,也许是这样的:
<some-form fiedls=\"vm.someFields\" ...></some-form>
然后,在controller中定义各个字段以及验证。angular-formly就是为这个需求而存在。
在controller中,把各个字段定义在数组中:
vm.rentalFields = [ { key:\'first_name\', type:\'input\', templateOptions:{ type:\'text\', label:\'姓\', placeholder: \'输入姓\', required: true } }, ... ]
使用hideExpression字段定义隐藏的条件:
{ key:\'under18\', type:\'checkbox\', templateOptions:{ label:\'是否不满18岁\' }, hideExpression: \'!model.email\' //email验证失败之前不显示 }
使用validators字段自定义验证规则:
{ key:\'license\', type:\'input\', templateOptions:{ label:\'身份证号\', placeholder:\'输入身份证号\' }, hideExpression: \'!model.province\', validators:{ driversLicense: function($viewValue, $modelValue, scope){ var value = $modelValue || $viewValue; if(value){ return validateDriversLicence(value); } }, expressionProperties:{ \'templateOptions.disabled\':function($viewValue, $modelValue, scope){ if(scope.model.province == \'山东省\'){ return false; } return true; } } }
首先安装:npm install angular-formly angular-formly-templates-bootstrap bootstrap api-check
Demo的文件结构:
css/
.....style.css
node_modules/
scripts/
.....MainController.js
.....provinces.js [提供select的选项,有关省]
app.js
index.html
index.html
<!DOCTYPE html> <html lang=\"en\"> <head> <meta charset=\"gb2312\"> <title></title> <link rel=\"stylesheet\" href=\"css/style.css\"/> <link rel=\"stylesheet\" href=\"node_modules/bootstrap/dist/css/bootstrap.min.css\"/> </head> <body ng-app=\"formlyApp\" ng-controller=\"MainController as vm\"> <div class=\"container col-md-4 col-md-offset-4\"> <form novalidate> <formly-form model=\"vm.rental\" fields=\"vm.rentalFields\" form=\"vm.rentalForm\"> <button type=\"submit\" class=\"btn btn-primary\" ng-disabled=\"vm.rentalForm.$invalid\">提交</button> </formly-form> </form> </div> <!--项目依赖--> <script src=\"node_modules/api-check/dist/api-check.js\"></script> <script src=\"node_modules/angular/angular.min.js\"></script> <script src=\"node_modules/angular-formly/dist/formly.js\"></script> <script src=\"node_modules/angular-formly-templates-bootstrap/dist/angular-formly-templates-bootstrap.min.js\"></script> <!--项目引用--> <script src=\"app.js\"></script> <script src=\"scripts/MainController.js\"></script> <script src=\"scripts/province.js\"></script> </body> </html>
app.js
(function(){ \'use strict\'; angular.module(\'formlyApp\',[\'formly\',\'formlyBootstrap\']) })();
province.js
以factory的方式返回一个对象,包含获取select选项的方法。
(function(){ \'use strict\';
angular
.module(\'formlyApp\') .factory(\'province\', province); function province(){ function getProvinces(){ return [ { \"name\":\"山东省\", \"value\":\"山东省\" }, { \"name\":\"江苏省\", \"value\":\"江苏省\" } ]; } return { getProvinces:getProvinces } } })();
MainController.js
(function(){ \'use strict\'; angular .module(\'formlyApp\') .controller(\'MainController\', MainController); function MainController(province){ var vm = this; vm.rental = {}; vm.rentalFields = [ { key:\'first_name\', type:\'input\', templateOptions:{ type:\'text\', label:\'姓\', placeholder: \'输入姓\', required: true } }, { key:\'last_name\', type:\'input\', templateOptions:{ type:\'text\', label:\'名\', placeholder:\'输入名\', required:true } }, { key:\'email\', type:\'input\', templateOptions:{ type:\'email\', label:\'邮箱\', placeholder:\'输入邮箱\', required:true } }, { key:\'under18\', type:\'checkbox\', templateOptions:{ label:\'是否不满18岁\' }, hideExpression: \'!model.email\' //email验证失败之前不显示 }, { key: \'province\', type:\'select\', templateOptions:{ label:\'选择省\', options: province.getProvinces() }, hideExpression: \'!model.email\' }, { key:\'license\', type:\'input\', templateOptions:{ label:\'身份证号\', placeholder:\'输入身份证号\' }, hideExpression: \'!model.province\', validators:{ driversLicense: function($viewValue, $modelValue, scope){ var value = $modelValue || $viewValue; if(value){ return validateDriversLicence(value); } }, expressionProperties:{ \'templateOptions.disabled\':function($viewValue, $modelValue, scope){ if(scope.model.province == \'山东省\'){ return false; } return true; } } } }, { key: \'insurance\', type: \'input\', templateOptions:{ label:\'保险\', placeholder:\'输入保险\' }, hideExpression: \'!model.under18 || !model.province\' } ]; function validateDriversLicence(value) { return /[A-Za-z]\\d{4}[\\s|\\-]*\\d{5}[\\s|\\-]*\\d{5}$/.test(value); } } })();
以上内容是小编给大家分享的AngularJS使用angular-formly进行表单验证的全部叙述,希望大家喜欢。
本文地址:https://www.stayed.cn/item/20588
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我