vue 動(dòng)態(tài)表單+動(dòng)態(tài)驗(yàn)證

    <el-form v-if="JSON.stringify(formInline) !== {}"
                      :model="formInline" :rules="rules"     
                     ref="formref" label-width="160px"
    >
          <div v-for="(it index) in dynamicForm" :key="index">
                  <el-form-item
                        v-if="it.controlType === 'text'"
                        :label="it.caption"
                         :prop="it.eleCode && it.eleCode"
                  >
                        <el-input
                              v-model="formInline[it.eleCode]"
                              placeholder="請(qǐng)輸入"
                              style="width: 300px"
                             clearable
                         >
                         </el-input>
                  </el-form-item>
                  <el-form-item
                        v-if="it.controlType === 'combo'"
                        :label="it.props.caption"
                         :prop="it.props.eleCode && it.props.eleCode"
                  >
                   <el-select
                         v-model="formInline[it.eleCode]"
                          :value="formInline[it.eleCode]"
                          placeholder="請(qǐng)選擇"
                          style="width: 300px"
                    >
                         <el-option
                                v-for="item in it"
                                :key="item.label"
                                :label="label"
                                :value="value"
                        ></el-option>
                    </el-select>
               </el-form-item>
                ....
          </div>
    </el-form>
</template>```
```<script>
export default {
  name: "forms",
  props: ['dynamikc'],          
  data() {
    return {
      formInline: {},
      dynamicForm: [{
          controlType: 'text',  //表單類型
          caption: '文本框',  // label
          eleCode: 'TEXT',  // 表單提交的字段屬性
          isShowValidate: true,  // 是否為必填項(xiàng)
          option: []  //單選復(fù)選數(shù)據(jù)
      }, {
          controlType: 'select',
          caption: '下拉框',
          isShowValidate: true,
          eleCode: 'SELECT',
          option: [{
              value: '1',
              label: '1'
          }, {
              value: '1',
              label: '1'
          }]
      }, {
          controlType: 'radio',
          caption: '單選',
          eleCode: 'RADIO',
          isShowValidate:  false,
          option: [{
              value: '1',
              label: '1'
          }, {
              value: '1',
              label: '1'
          }]
      }],
      rules: {},
    }
  },
  created() {
      this.dynamicForm.map(item => {
            this.propsKey(item)
      })
  },
  methods: {
      /**
       *  表單校驗(yàn)+提交 
      */
      submit() {
          this.$refs['formref'].validate((valid) => {
            if (valid) {
              alert('submit!');
            } else {
              // alert('error submit!!');
              return false;
            }
          });
      },
      /**
       *  去form-model的key 和 判斷創(chuàng)建rules
       *  item[Object] 動(dòng)態(tài)表單的item
       */
      propsKey(item) {
          if(item.eleCode) {
              // 創(chuàng)建動(dòng)態(tài)表單的v-model
              let obj = {};
              obj[item.eleCode] = '';
              this.formInline = Object.assign({...this.formInline}, {...obj});
              // 判斷是否是必填項(xiàng)
              if(item.isShowValidate) {
                  if(item.controlType === 'text') {
                      let rule = {};
                      rule[item.eleCode] = [{
                          required: true, message: '必填項(xiàng)不能為空埋市,請(qǐng)輸入', trigger: 'blur'
                      }];
                      this.rules = Object.assign({...this.rules}, {...rule});
                  } else {
                      let rule = {};
                      rule[item.eleCode] = [{
                          required: true, message: '必填項(xiàng)不能為空冠桃,請(qǐng)選擇', trigger: 'change'
                      }];
                      this.rules = Object.assign({...this.rules}, {...rule});
                  }
              }
          } 
      }
  },
};
</script>```
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市道宅,隨后出現(xiàn)的幾起案子食听,更是在濱河造成了極大的恐慌,老刑警劉巖污茵,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件樱报,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡泞当,警方通過查閱死者的電腦和手機(jī)迹蛤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來襟士,“玉大人盗飒,你說我怎么就攤上這事〉蟹洌” “怎么了箩兽?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵津肛,是天一觀的道長章喉。 經(jīng)常有香客問我,道長身坐,這世上最難降的妖魔是什么秸脱? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮部蛇,結(jié)果婚禮上摊唇,老公的妹妹穿的比我還像新娘。我一直安慰自己涯鲁,他們只是感情好巷查,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抹腿,像睡著了一般岛请。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上警绩,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天崇败,我揣著相機(jī)與錄音,去河邊找鬼。 笑死后室,一個(gè)胖子當(dāng)著我的面吹牛缩膝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播岸霹,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼疾层,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了松申?” 一聲冷哼從身側(cè)響起云芦,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贸桶,沒想到半個(gè)月后舅逸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡皇筛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年琉历,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片水醋。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡旗笔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拄踪,到底是詐尸還是另有隱情蝇恶,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布惶桐,位于F島的核電站撮弧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏姚糊。R本人自食惡果不足惜贿衍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望救恨。 院中可真熱鬧贸辈,春花似錦、人聲如沸肠槽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秸仙。三九已至嘴拢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間筋栋,已是汗流浹背炊汤。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抢腐,地道東北人姑曙。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像迈倍,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卦洽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348