一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - vue + el-form 實現的多層循環表單驗證

vue + el-form 實現的多層循環表單驗證

2021-11-30 14:45xiaoweiba JavaScript

這篇文章主要介紹了vue + el-form 實現的多層循環表單驗證,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下。

html

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<el-form :model="formObj" :rules="rules" ref="ruleForm">
 <el-form-item :label="'護理記錄項目配置:'" label-width="180px">
  <template v-for="(formItem, index) in formObj.formDictExtendDoList">
   <div class="hljl-container" :key="formItem.id">
    <el-row>
     <el-col :span="8">
      <el-form-item
       :label="'字段名稱:'"
       label-width="90px"
       :rules="rules.fieldName"
       :prop="'formDictExtendDoList.'+index+'.fieldName'"
      >
       <el-input
        v-model.trim="formItem.fieldName"
        type="text"
        :clearable="true"
        maxLength="100"
        placeholder="請輸入"
       />
       <!--@blur="isRepeat(formItem, index, 'fieldName')"-->
      </el-form-item>
     </el-col>
     <template
      v-for="(child, index1) in formItem.item"
      v-show="formItem.type === 2"
     >
      <el-col :span="8" :key="child.id">
       <el-form-item
        :label="'選項' + (index1+1) + ':'"
        label-width="90px"
        :rules="rules.value"
        :prop="'formDictExtendDoList.'+index+'.item.'+index1+'.value'"
       >
        <el-input
         v-model.trim="child.value"
         @input="forceUpdate"
         :clearable="true"
         type="text"
         maxlength="20"
         placeholder="請輸入"
        />
       </el-form-item>
      </el-col>
     </template>
    </el-row>
   </div>
  </template>
 </el-form-item>
</el-form>

js

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
let _THAT
export
default {
  name: 'formMangeAdd',
  data() {
    return {
      formObj: {
        formDictExtendDoList: []
      },
      rules: {
        fieldName: [{
          required: true,
          message: '請輸入',
          trigger: 'blur'
        }, {
          validator: this.itemValidator,
          trigger: 'blur'
        }],
        value: [{
          validator: (rule, value, callback) = > {
            // I'm a genius.
            let that = _THAT
            that.forceUpdate()
            let field = rule.field
            let arr = field.split('.')
            let index = +arr[1]
            let index1 = +arr[3]
            let _value = that.formObj.formDictExtendDoList[index].item[index1].value
            if (_value === '' || _value === null || _value === undefined) {
              callback(new Error('請輸入'))
            } else {
              callback()
            }
          },
          trigger: 'blur'
        }]
      }
    }
  },
  beforeCreate() {
    _THAT = this
  },
  created() {
    // 測試數據
    let test = [{
      id: 'id_1595641858891',
      // 唯一配置id
      fieldName: '字段名稱',
      // 字段名稱
      item: []
    }, {
      id: 'id_1595641858892',
      // 唯一配置id
      fieldName: '字段名稱',
      // 字段名稱
      item: []
    }, {
      id: 'id_1595641858893',
      // 唯一配置id
      fieldName: '字段名稱',
      // 字段名稱
      item: [{
        id: 'item_id_1595641858891',
        // 唯一id
        value: '選項1'
      }, {
        id: 'item_id_1595641858892',
        // 唯一id
        value: '選項2'
      }]
    }]
    this.formObj.formDictExtendDoList = test
  },
  methods: {
    /**
     * 重復性判斷
     **/
    itemValidator: (rule, value, callback) = > {
      let that = _THAT
      that.forceUpdate()
      let field = rule.field
      let ruleArr = field.split('.')
      let index = +ruleArr[1]
      let type = ruleArr[2]
      if (value === '') {
        callback()
        return false
      }
      let arr = []
      for (let i = 0; i < that.formObj.formDictExtendDoList.length; i++) {
        let formDictExtendDoListItem = that.formObj.formDictExtendDoList[i]
        let formDictExtendDoListFieldName = formDictExtendDoListItem.fieldName
        let formDictExtendDoListProjectName = formDictExtendDoListItem.projectName
        if (index !== i) {
          if (type === 'fieldName') {
            if (formDictExtendDoListFieldName !== '') {
              if (formDictExtendDoListFieldName === value) {
                arr.push(i)
              }
            }
          }
        }
      }
      if (arr.length !== 0) {
        if (type === 'fieldName') {
          callback(new Error('與配置' + (+arr[0] + 1) + '的字段名稱重復'))
          setTimeout(function() {
            that.formObj.formDictExtendDoList[index].fieldName = ''
          }, 500)
        }
      } else {
        callback()
      }
    },
    forceUpdate() {
      this.$forceUpdate()
    }
  }
}

以上就是vue + el-form 實現的多層循環表單驗證的詳細內容,更多關于vue 表單驗證的資料請關注服務器之家其它相關文章!

原文鏈接:http://xiaowiba.com/archives/1179/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 舔比小说| 亚洲av欧美在我 | 波多野 在线 | 亚洲国产一区二区三区青草影视 | 禁忌第一季第3季 | 国产91素人搭讪系列天堂 | 欧美ay | 天天摸天天爽视频69视频 | 91精品国产综合久久福利 | 国产三级精品91三级在专区 | 草大逼 | 美国艳星lisann成人作品 | 全彩调教侵犯h本子全彩妖气he | 国产在线精品亚洲第一区香蕉 | 日本花季传媒2020旧版安卓 | 天天做天天爽 | 久久视频在线视频 | 国产一区二区三区高清 | 亚洲国产精品第一页 | 91大神第九部红酒气质女 | 俄罗斯freeⅹ性欧美 | 免费操比视频 | 91短视频破解版 | 6080欧美一区二区三区四区 | 国产精品永久免费10000 | 精品一区二区三区视频 | 成全动漫视频在线观看 | 青草欧美| 欧美综合一区二区三区 | 性做久久久久久久 | 5278欧美一区二区三区 | 性猛交娇小69hd| 91久久色 | 糖心vlog网页版 | 青青青手机在线观看 | 我的妹妹最近有点怪在线观看 | 欧美人成绝费网站色www吃脚 | 亚洲H成年动漫在线观看不卡 | 99re在线视频观看 | 99精品视频在线观看免费播放 | 亚洲国产午夜看片 |