vue elementui form表单验证

vue

最近我们公司将前端框架由easyui 改为 vue+elementui 。自学vue两周 就开始了爬坑之路。业余时间给大家分享一下心得,技术新手加上第一次分享(小激动),有什么不足的地方欢迎大家指正,多多交流才能共同进步!

1.问题 我们公司的项目比较大 表格 表单的页面都不胜数 ,基于此封装了一些 可复用的代码。

2.分析  vue给了我们不一样的前端代码体验  element ui 给我们一套功能强大的组件 减少了我们大量的开发时间 。双剑合璧 天下无敌!  但每个公司的代码风格不同  用户的要求也比较刁端 ui团队设计完美 我们怎样才能用这个两把剑闯出自己的江湖 就需要大家好好琢磨了。

废话不多说!进入正题 

form表单验证规则的封装 

  1.ellementui的处理    1. Form 组件上一次性传递所有的验证规则  2 .单个的表单域上传递属性的验证规则 。

   

 1 <el-form :model="dynamicValidateForm" ref="dynamicValidateForm" label-width="100px" class="demo-dynamic">

2 <el-form-item

3 prop="email"

4 label="邮箱"

5 :rules="[

6 { required: true, message: '请输入邮箱地址', trigger: 'blur' },

7 { type: 'email', message: '请输入正确的邮箱地址', trigger: 'blur,change' }

8 ]"

9 >

10 <el-input v-model="dynamicValidateForm.mobil"></el-input>

11 </el-form-item>

12 <el-form-item

13 label="姓名:"

14 prop="name"

15 :rules="[{ required: true, message: '请输入姓名', trigger: 'blur' }]">

16 <el-input v-model="dynamicValidateForm.name"></el-input>

17 </el-form-item>

18 <el-form-item label="手机号:" prop="mobil"

19 :rules="filter_rules({required:true,type:'mobile'})">

20 <el-input v-model="dynamicValidateForm.mobil"></el-input>

21 </el-form-item>

22

23 </el-form>

观察上面的代码 有一个共性 单个的表单域上传递属性的验证规则 ,给rules 属性一个数组 

重点来了 19行代码是什么意思???? 

 这就是我们封装的全局可复用的方法   传入需要的参数,你就可以得到你想要的验证规则 rules 数组

在我们的工具包建一个 js文件  我们的全局方法就有了

 1 exports.install = function (Vue, options) {

2

3 Vue.prototype.filter_rules = function (item){

4

5 return [{},{}]

6

7 }

8

9

10 }

还要在main.js 中注册 

下面分享下我的js文件

  1 import { validateMoneyNumber,qq,mobile,regexn,integer} from '@/utils/validate'

2

3 exports.install = function (Vue, options) {

4

5

6 /**

7 * 注意: 定义type 规则时 不用做非空验证

8 * 只需要传入 required:true 即可

9 * */

10 /*保留两位小数*/

11 const isvalidateMoney = (rule, value, callback) => {

12 if(value != null && value != "") {

13 if(!validateMoneyNumber(value)) {

14 callback(new Error('请输入正确的数字,最多保留两位小数!'))

15 } else {

16 callback()

17 }

18 }

19 else{

20 callback();

21 }

22 }

23 /*验证QQ号码*/

24 const isvalidateQQ= (rule, value, callback) => {

25 if(value != null && value != "") {

26 if(!qq(value)) {

27 callback(new Error('您输入的QQ号不正确!'))

28 } else {

29 callback()

30 }

31 }

32 else{

33 callback();

34 }

35 }

36 /*验证手机号*/

37 const isvalidateMobile= (rule, value, callback) => {

38 if(value != null && value != "") {

39 if(!mobile(value)) {

40 callback(new Error('您输入的手机号不正确!'))

41 } else {

42 callback()

43 }

44 }

45 else{

46 callback();

47 }

48 }

49

50 /*含有非法字符(只能输入字母、汉字)*/

51 const isvalidateRegexn= (rule, value, callback) => {

52 if(value != null && value != "") {

53 if(!regexn(value)) {

54 callback(new Error('含有非法字符(只能输入字母、汉字)!'))

55 } else {

56 callback()

57 }

58 }

59 else{

60 callback();

61 }

62 }

63 /*请输入正整数*/

64 const isvalidateInteger= (rule, value, callback) => {

65 if(value != null && value != "") {

66 if(!integer(value)) {

67 callback(new Error('请输入正整数!'))

68 } else {

69 callback()

70 }

71 }

72 else{

73 callback();

74 }

75 }

76

77

78

79

80 /**

81 * 参数 item

82 * required true 必填项

83 * maxLength 字符串的最大长度

84 * min 和 max 必须同时给 min < max type=number

85 * type 手机号 mobile

86 * 邮箱 email

87 * 网址 url

88 * 各种自定义类型 定义在 src/utils/validate 中 持续添加中.......

89 * */

90

91 Vue.prototype.filter_rules = function (item){

92 let rules = [];

93 if(item.required){

94 rules.push({ required: true, message: '该输入项为必填项!', trigger: 'blur' });

95 }

96 if(item.maxLength){

97 rules.push({ min:1,max:item.maxLength, message: '最多输入'+item.maxLength+'个字符!', trigger: 'blur' })

98 }

99 if(item.min&&item.max){

100 rules.push({ min:item.min,max:item.max, message: '字符长度在'+item.min+'至'+item.max+'之间!', trigger: 'blur' })

101 }

102 if(item.type){

103 let type = item.type;

104 switch(type) {

105 case 'email':

106 rules.push({ type: 'email', message: '请输入正确的邮箱地址', trigger: 'blur,change' });

107 break;

108 case 'qq':

109 rules.push( { validator: isvalidateQQ, trigger: 'blur,change' });

110 break;

111 case 'mobile':

112 rules.push( { validator: isvalidateMobile, trigger: 'blur,change' });

113 break;

114 case 'regexn':

115 rules.push( { validator: isvalidateRegexn, trigger: 'blur,change' });

116 break;

117 case 'integer':

118 rules.push( { validator: isvalidateInteger, trigger: 'blur,change' });

119 break;

120 default:

121 rule.push({});

122 break;

123 }

124 }

125

126

127 return rules;

128 };

129 };

看明白了吗  第一行  是引入各种正则表达式   然后自定义校验规则    。  传入你自定义的参数 就可以拿到你想要的规则   (很熟悉吧  参考 easyui 表单验证)

下面是效果

欢迎来交流哦!

 

  

以上是 vue elementui form表单验证 的全部内容, 来源链接: utcz.com/z/377217.html

回到顶部