最近参与的项目,总结其中的几个功能点:今天先来简单的,点击 添加 按钮,页面弹出弹框,弹框中通过表单输入形式,用户输入内容,点击 确定 ,进行表单验证,验证通过后实现添加内容到页面。所用框架与插件:angular、layer
1、点击添加执行对应事件:弹出弹窗
$scope.add = function(){ //应用jQuery选取元素并显示 var addDom = $('#addContent'); //选中在弹窗中显示的html元素 addDom.show(); //元素原本隐藏,使其显示 //接下来是layer的用武之地: var index = layer.open({ type:1, area:'750px', offset: '100px', closeBtn :1, title: ["添加", "background:#0074d9; color:#fff; margin-bottom:24px;" ], content: addDom, success: function(layero,index){ }, cancel:function(){ addDom.hide(); $scope.$apply(function(){ $scope.toCancel(); }); layer.close(index); } }); }layer.open(options)方法: options: 此部分内容来源layer官方文档说明:http://www.layui.com/doc/modules/layer.html
type - 基本层类型 类型:Number,默认:0 layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)。 若你采用layer.open({type: 1})方式调用,则type为必填项(信息框除外)
area - 宽高 类型:String/Array,默认:’auto’ 在默认状态下,layer是宽高都自适应的,但当你只想定义宽度时,你可以area: ‘500px’,高度仍然是自适应的。当你宽高都要定义时,你可以area: [‘500px’, ‘300px’]
offset - 坐标 类型:String/Array,默认:垂直水平居中
offset默认情况下不用设置。但如果你不想垂直水平居中,你还可以进行以下赋值: 值 备注 offset: ‘100px’ 只定义top坐标,水平保持居中 offset: [‘100px’, ‘50px’] 同时定义top、left坐标 offset: ‘t’ 快捷设置顶部坐标 offset: ‘r’ 快捷设置右边缘坐标 offset: ‘b’ 快捷设置底部坐标 offset: ‘l’ 快捷设置左边缘坐标 offset: ‘lt’ 快捷设置左上角 offset: ‘lb’ 快捷设置左下角 offset: ‘rt’ 快捷设置右上角 offset: ‘rb’ 快捷设置右下角
closeBtn - 关闭按钮 类型:String/Boolean,默认:1 layer提供了两种风格的关闭按钮,可通过配置1和2来展示,如果不显示,则closeBtn: 0
title - 标题 类型:String/Array/Boolean,默认:’信息’ title支持三种类型的值,若你传入的是普通的字符串,如title :’我是标题’,那么只会改变标题文本;若你还需要自定义标题区域样式,那么你可以title: [‘文本’, ‘font-size:18px;’],数组第二项可以写任意css样式;如果你不想显示标题栏,你可以title: false
content - 内容 类型:String/DOM/Array,默认:” content可传入的值是灵活多变的,不仅可以传入普通的html内容,还可以指定DOM,更可以随着type的不同而不同。
success - 层弹出后的成功回调方法 类型:Function,默认:null 当你需要在层创建完毕时即执行一些语句,可以通过该回调。success会携带两个参数,分别是当前层DOM当前层索引。如:
layer.open({ content: '测试回调', success: function(layero, index){ console.log(layero, index); } });cancel - 右上角关闭按钮触发的回调 类型:Function,默认:null 该回调携带两个参数,分别为:当前层索引参数(index)、当前层的DOM对象(layero),默认会自动触发关闭。如果不想关闭,return false即可,如;
cancel: function(index, layero){ if(confirm('确定要关闭么')){ //只有当点击confirm框的确定时,该层才会关闭 layer.close(index) } return false; }2.点击弹窗确定按钮,校验输入内容字段规则: 由于字段规则较为特殊,有一些长度的特殊限制,使用angular表单验证不是很方便,故自己写校验方法:
各输入框的model值: $scope.addDev = { field1:'', field2:'', field3:'', field4:'', field5:$scope.itemSelectedArr }; //准备一个添加表单提交的变量,在表单提交时开始校验,如有错误信息开始显示; $scope.addSub = false; //添加表单提交 //准备一个记录错误信息的变量,数据类型为对象 $scope.validErrorMsg = {}; //记录错误提示信息 校验方法: validAddForm = function(){ //给记录错误提示信息的对象$scope.validErrorMsg添加属性:每个输入字段对应一个属性,分别记录每个字段可能出现的错误提示信息。对应的属性值初始为空字符串: $scope.validErrorMsg.field1 = ''; $scope.validErrorMsg.field2 = ''; $scope.validErrorMsg.field3 = ''; $scope.validErrorMsg.field4 = ''; $scope.validErrorMsg.field5 = ''; } //开始校验 取到各输入框绑定的model值 var _field1 = $scope.addObj.field1, _field2 = $scope.addObj.field2, _field3 = $scope.addObj.field3, _field4 = $scope.addObj.field4, _field5 = $scope.addObj.field5 //字段1的字段正则:中文、数字、字母、下划线 var _regField1 = /^[\u4e00-\u9fa50-9A-Za-z_]+$/; //校验开始啦~ 逐个字段开始校验,先校验字段1: if(!_field1){ $scope.validErrorMsg.field1 = '字段1不能为空'; } else if( String(_field1).length > 10 ){ $scope.validErrorMsg.field1='字段1长度不能超过10个字符'; } else if( !_regField1.test(_field1) ){ $scope.validErrorMsg.field1='字段1仅支持中文、数字、字母及下划线'; } //校验字段2: var _regField2=/^[a-f0-9]+$/; //16进制数字及字母 if(!_field2){ $scope.validErrorMsg.field2='字段2不能为空'; } else if( String(_field2).length != 32 && String(_field2).length != 64){ $scope.validErrorMsg.field2='字段2长度为32或64个字符'; } else if( !_regField2.test(_field2) ){ $scope.validErrorMsg.field2='字段2只能是16进制数字及字母(0-9、a-f)'; } //校验字段3:字段3为非必填项 var _regField3 = /^[a-zA-Z0-9]+$/; //数字、字母 if(_field3 && String(_field3).length != 64){ $scope.validErrorMsg.field3='字段3长度为64个字符'; } else if(_field3 && !_regField3.test(_field3)){ $scope.validErrorMsg.field3='字段3只能是数字及字母(0-9、a-z、A-Z)'; } //校验字段4: var _regField4 = /^[a-zA-Z0-9]+$/; if(!_field4){ $scope.validErrorMsg.field4='field4不能为空'; } else if( String(_field4).length != 8){ $scope.validErrorMsg.field4='field4长度为8个字符'; } else if( !_regField4.test(_field4) ){ $scope.validErrorMsg.devType='field4只能是数字及字母(0-9、a-z、A-Z)'; } //校验完毕后,枚举错误信息对象$scope.validErrorMsg中每一项是否为初始的空字符串还是存储了错误提示信息,如果任意一项有错误提示信息,则整个表单为校验不通过;否则校验通过: for(var prop in $scope.validErrorMsg){ if( $scope.validErrorMsg[prop] ){ return false; } } return true; }