el-table数据遍历结合el-form校验
需要实现的效果
最新遇到一个需求,数据在table中遍历展示,且需要校验每一项数据的格式,而且表头数据需要增加必填项*标示。
这里的校验和平时的校验不一样的是此处的数据是循环遍历展示的,因此要注意
- prop的值为`bindList[${scope.$index}].nickName`
- :model="bindForm"中bindForm的数据类型,
- 表头必填项数据的渲染函数render-header,这里希望表头文字以参数的形式传入而不是每个表头数据写一个函数渲染,我之前的cto再三要求不要写重复代码!!!
- 此处的el-form-item的:rules="rules.nickName"不能写在el-form上
代码实现如下:
1 23514 505 466 7 128 10 119 13 14 3015 28 2920 2725 2631 32 3733 35 3634 38 39 4540 43 44新增 41删除 424749保存 48
js代码如下:
1 export default {
2 data() {
3 return {
4 // 支付场景数据
5 paymentSceneList: [
6 { label: '图书管理员', value: 1 },
7 { label: '物业管理员', value: 2 },
8 { label: '宿舍管理员', value: 3 },
9 { label: '教室管理员', value: 4 }
10 ],
11 // 此处必须是这样的数据类型,才能够校验成功
12 bindForm: {
13 bindList: []
14 },
15 // 支付场景是否开启的状态值
16 STATUS: {
17 OPEN: 1, // 开启
18 CLOSE: 0 // 不开启
19 },
20 rules: {
21 nickName: [
22 {
23 required: true,
24 message: '姓名不可为空',
25 trigger: ['blur', 'change']
26 }
27 ],
28 paymentScenes: [
29 {
30 type: 'array',
31 required: true,
32 trigger: ['blur', 'change'],
33 message: '职务不可为空'
34 }
35 ]
36 }
37 };
38 },
39 methods: {
40 /**
41 * 渲染表头 表头增加必填项*
42 * str自定义传入参数 为表头名称
43 */
44 // eslint-disable-next-line
45 renderHeader (h, { column, $index }, str) {
46 return h('span', [
47 h('span', { style: { color: '#f56c6c' } }, ['*']),
48 h('span', {}, [str])
49 ]);
50 },
51 add() {
52 this.bindForm.bindList.push({
53 nickName: '',
54 sex: '',
55 paymentScenes: []
56 });
57 },
58 sub(index) {
59 this.bindForm.bindList.splice(index, 1);
60 },
61 save() {
62 this.$refs.ruleForm.validate((valid) => {
63 if (valid) {
64 // 通过校验时
65 }
66 });
67 }
68 },
69 mounted() {
70 this.bindForm.bindList.push({
71 nickName: '',
72 sex: '',
73 paymentScenes: []
74 });
75 }
转自:https://www.cnblogs.com/scuplting-in-time/p/13801532.html