AngularJS使用angular-formly进行表单验证


Posted in Javascript onDecember 27, 2015

当验证表单中有很多字段时,这时候可能希望把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进行表单验证的全部叙述,希望大家喜欢。

Javascript 相关文章推荐
JQuery 确定css方框模型(盒模型Box Model)
Jan 22 Javascript
一个报数游戏js版(约瑟夫环问题)
Aug 05 Javascript
javascript定义函数的方法
Dec 06 Javascript
快速排序 php与javascript的不同之处
Feb 22 Javascript
jQuery图片播放8款精美插件分享
Feb 17 Javascript
jquery简单的拖动效果实现原理及示例
Jul 26 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
Nov 30 Javascript
JS实现FLASH幻灯片图片切换效果的方法
Mar 04 Javascript
深入理解JS正则表达式---分组
Jul 18 Javascript
详解vue服务端渲染(SSR)初探
Jun 19 Javascript
vue router 配置路由的方法
Jul 26 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
Jul 19 Javascript
延时加载JavaScript代码提高速度
Dec 27 #Javascript
AngularJS使用ngMessages进行表单验证
Dec 27 #Javascript
详解maxlength属性在textarea里奇怪的表现
Dec 27 #Javascript
SublimeText自带格式化代码功能之reindent
Dec 27 #Javascript
Javascript removeChild()删除节点及删除子节点的方法
Dec 27 #Javascript
JavaScript的removeChild()函数用法详解
Dec 27 #Javascript
JavaScript构造函数详解
Dec 27 #Javascript
You might like
php中理解print EOT分界符和echo EOT的用法区别小结
2010/02/21 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
jQuery hover 延时器实现代码
2011/03/12 Javascript
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
js正则表达式中exec用法实例
2015/07/23 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
WebView启动支付宝客户端支付失败的问题小结
2017/01/11 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
老生常谈ES6中的类
2017/07/31 Javascript
js保留两位小数方法总结
2018/01/31 Javascript
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
Python爬虫包BeautifulSoup实例(三)
2018/06/17 Python
dataframe 按条件替换某一列中的值方法
2019/01/29 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
Pandas操作CSV文件的读写实现方法
2019/11/13 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
python list等分并从等分的子集中随机选取一个数
2020/11/16 Python
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
师范学院毕业生求职信范文
2013/12/26 职场文书
科研课题实施方案
2014/03/18 职场文书
小学一年级学生评语
2014/04/22 职场文书
优秀护士演讲稿
2014/04/30 职场文书
听证通知书
2015/04/24 职场文书
OpenCV-Python实现轮廓拟合
2021/06/08 Python
React 高阶组件HOC用法归纳
2021/06/13 Javascript
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
HTML中的表格元素介绍
2022/02/28 HTML / CSS
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server
Win11无法访问设备和打印机 如何解决页面空白
2022/04/09 数码科技