1. 程式人生 > >iview Form 表單驗證小結

iview Form 表單驗證小結

手頭的專案有一個需求是建立自定義表單模板,深入使用了iview的Form控制元件,踩了不少iview的坑,同時也鍛鍊了validate相關的能力。

  • 基本知識

這裡寫圖片描述
Form由一些FomeItem組成,可以為Form設定rule來指定相關表單項的限制條件。
通過$ref 可以訪問到 Form 元件,呼叫 validate 函式,即可獲取相應的校驗函式。iview中,Form驗證是根據FormItem的prop屬性來驗證
在編寫校驗函式前,首先需要了解表單驗證相關知識,參看iview元件中使用的非同步表單驗證外掛 async-validator

  • validate function(source, [options], callback)

    function( 驗證物件(必須), 驗證選項(可選), 回撥函式(必須))
  • rule function(rule, value, callback, source, options)
  • type 驗證型別的限制,預設為string,全型別type如圖
    全型別type
    一個栗子:
const validateNameList = (rule, value, callback) => {
    if (value.length === 0) {
        callback(new Error('請選擇name'));
    } else {
        callback();
    }
}; validateAdvancedFormItem: { // 對於單個欄位來說,通常需要多個驗證規則,這些規則以陣列展示 name: [ { required: true, message: '任務名稱不能為空', trigger: 'blur' }, { type: 'string', max: 20, message: '不能超過20個字元', trigger: 'blur' }, ], nameList: [ { required: true, type: 'array', message: '請選擇nameList', trigger: 'blur'
}, { validator: validateBusiness, trigger: 'blur' }, ] endTimeVal: [ { required: true, type: 'date', message: '請選擇結束時間', trigger: 'change' } ], noVerify:[{ required: true, validator: noVerify }], // 自帶的驗證器不能滿足要求時,需要我們自定義驗證器 },
  • 記錄踩過的坑

    1. input 預設輸入為String型別
      如果在表單驗證中宣告 type:number,建議input中加上number屬性,將使用者的輸入自動轉換為 Number 型別。
    2. select 單選多選
      提示: 單選返回的是一個項,而多選返回的是陣列。
    3. dataPicker v-model失效
      必須on-change返回並賦值才能實現資料繫結,否則:value無法捕捉日期的而選擇變動。