【Vue+ElementUI】表單校驗(二)——動態(tài)表單項

Element中表單驗證的基本方法可參照 官方說明

<el-form :model="dynamicValidateForm" ref="dynamicValidateForm" label-width="100px" class="demo-dynamic">
  <el-form-item
    prop="email"
    label="郵箱"
    :rules="[
      { required: true, message: '請輸入郵箱地址', trigger: 'blur' },
      { type: 'email', message: '請輸入正確的郵箱地址', trigger: 'blur,change' }
    ]"
  >
    <el-input v-model="dynamicValidateForm.email"></el-input>
  </el-form-item>
  <el-form-item
    v-for="(domain, index) in dynamicValidateForm.domains"
    :label="'域名' + index"
    :key="domain.key"
    :prop="'domains.' + index + '.value'"
    :rules="{
      required: true, message: '域名不能為空', trigger: 'blur'
    }"
  >
    <el-input v-model="domain.value"></el-input><el-button @click.prevent="removeDomain(domain)">刪除</el-button>
  </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="submitForm('dynamicValidateForm')">提交</el-button>
    <el-button @click="addDomain">新增域名</el-button>
    <el-button @click="resetForm('dynamicValidateForm')">重置</el-button>
  </el-form-item>
</el-form>

<script>
  export default {
    data() {
      return {
        dynamicValidateForm: {
          domains: [{
            value: ''
          }],
          email: ''
        }
      };
    },
    methods: {}
  }
</script>

這是官方的一個例子玲躯,例子中包含一個表單,數(shù)據(jù)結(jié)構(gòu)是:

dynamicValidateForm:{
    email:'', // 基本屬性
    domains:[] // 數(shù)組
}

"域名"表單項用了一個v-for來動態(tài)新增鳄乏,需要注意的是:prop的值府蔗,常見的錯誤信息是"Error: please transfer a valid prop path to form item!",例子中使用的是'domains.' + index + '.value'汞窗,其實和prop="email"類似,用鏈?zhǔn)浇Y(jié)構(gòu)表示赡译。

如果 仲吏,數(shù)據(jù)的結(jié)構(gòu)是

dynamicValidateForm:{}
domains:[]

要整理成以上的結(jié)構(gòu)(如果一定要這樣實現(xiàn)),容易有坑!裹唆!

<el-form-item
    v-for="(domain, index) in dynamicValidateForm.domains"
    :label="'域名' + index"
    :key="domain.key"
    :prop="'domains.' + index + '.value'"
    :rules="{
      required: true, message: '域名不能為空', trigger: 'blur'
    }"
  >
  <!-- 選擇框-->
  <el-select filterable v-model="domain.value" placeholder="請選擇" >
     <el-option
         v-for="item in domain.options"
         :key="item.value"
         :label="item.label"
         :value="item.value" >
      </el-option>
    </el-select>
  </el-form-item>

<script>
  export default {
     data () {
      dynamicValidateForm:{
        email:'', // 基本屬性
        domains:[] // 數(shù)組
      }
    },
    created () {
      this.id = this.$route.params.id
      // 有ID誓斥,則是編輯頁面,否則是新增頁面
      if(this.id){
        this.getData()
      }
    }许帐,
    methods: {
        getData(){
           getData(this.id).then(res => {
             this.dynamicValidateForm = res.data.dynamicValidateForm 
             this.dynamicValidateForm.domains = res.data.domains
            })
        }
    }
  }
</script>

進(jìn)入頁面后劳坑,發(fā)現(xiàn)進(jìn)入編輯頁面后,選擇框選擇后沒反應(yīng)了成畦,頁面也沒有報錯~~~
為什么呢距芬?
找了半天原因,找了<select>的文檔循帐,沒發(fā)現(xiàn)問題 ~~~~~

終于框仔,

this.dynamicValidateForm = res.data.dynamicValidateForm this.dynamicValidateForm.domains = res.data.domains

這兩行代碼,第一行由于res.data.dynamicValidateForm就是一個object拄养,它并沒有domains這個屬性离斩,賦值后,dynamicValidateForm 中也沒有domains這個屬性了瘪匿。而第二行代碼跛梗,賦值給domains ,沒有報錯棋弥,可是使用的時候核偿,這個屬性卻不會生效。而<select>綁定的可是domains 中的值嘁锯。宪祥。

解決方法:

this.$set(this.dynamicValidateForm,'domains ',res.data.domains)

在vue.js中,給對象賦值家乘,最好還是使用$set

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蝗羊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子仁锯,更是在濱河造成了極大的恐慌耀找,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件业崖,死亡現(xiàn)場離奇詭異野芒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)双炕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門狞悲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人妇斤,你說我怎么就攤上這事摇锋〉ふ” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵荸恕,是天一觀的道長乖酬。 經(jīng)常有香客問我,道長融求,這世上最難降的妖魔是什么咬像? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮生宛,結(jié)果婚禮上县昂,老公的妹妹穿的比我還像新娘。我一直安慰自己茅糜,他們只是感情好七芭,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蔑赘,像睡著了一般狸驳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缩赛,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天耙箍,我揣著相機(jī)與錄音,去河邊找鬼酥馍。 笑死辩昆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的旨袒。 我是一名探鬼主播汁针,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼砚尽!你這毒婦竟也來了施无?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤必孤,失蹤者是張志新(化名)和其女友劉穎猾骡,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敷搪,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡兴想,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了赡勘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫂便。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖闸与,靈堂內(nèi)的尸體忽然破棺而出顽悼,到底是詐尸還是另有隱情曼振,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布蔚龙,位于F島的核電站,受9級特大地震影響映胁,放射性物質(zhì)發(fā)生泄漏木羹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一解孙、第九天 我趴在偏房一處隱蔽的房頂上張望坑填。 院中可真熱鬧,春花似錦弛姜、人聲如沸脐瑰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苍在。三九已至,卻和暖如春荠商,著一層夾襖步出監(jiān)牢的瞬間寂恬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工莱没, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留初肉,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓饰躲,卻偏偏與公主長得像牙咏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嘹裂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • React中沒有類似Angular那樣的雙向數(shù)據(jù)綁定焦蘑,在做一些表單復(fù)雜的后臺類頁面時盯拱,監(jiān)聽、賦值例嘱、傳遞狡逢、校驗時編碼...
    tedyuen777閱讀 9,865評論 1 23
  • ??JavaScript 與 HTML 之間的交互是通過事件實現(xiàn)的奢浑。 ??事件,就是文檔或瀏覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,490評論 1 11
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理腋腮,服務(wù)發(fā)現(xiàn)雀彼,斷路器壤蚜,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 考試成績: 6歲:把96分的語文考試試卷偷偷藏起來莺丑,然后擦干眼淚下決心考個100分回來著蟹。 16歲:拿著60分的物理...
    Nightliar閱讀 376評論 0 2
  • 當(dāng)我此刻開始寫下我的復(fù)盤,我知道這件事情不能再停下來了梢莽。 hi小姐昨天說了“如果你們開始復(fù)盤萧豆,就一定要堅持下去,...
    Ada彩英閱讀 459評論 1 3