iview 表單驗證不經過問題?

項目須要,須要慫iview.。使用一段時間感受跟elementUI用起來差很少很方便。使用過程當中遇到表單驗證問題,如何避免在驗證過程當中偶爾出現驗證不經過的異常狀況?html

《1》:給 <Form> 標籤設置屬性 :model = "fromdata" 與 :rules = "fromrules" 與 ref = "fromdatadom"git

《2》:同時給須要驗證的每一個 <FormItem> 設置屬性 prop ,同時在fromrules中定義該屬性的校驗規則github

《3》:將須要驗證的每一個屬性值定義在fromdata內,並:model 綁定在 input上。必須設置,某個值改變驗證依然通不過less

《4》:在操做保存按鈕時,經過ref = "fromdatadom"設置某個範圍內驗證,參數爲檢驗完的回調,會返回一個 Boolean 表示成功與失敗
    handleSubmit (name) {
      this.$refs[name].validate((valid) => {
        if (valid) {
          this.$Message.success('Success!');
        } else {
          this.$Message.error('Fail!');
        }
      })
    }iview

以上是驗證的基本步驟,可是我作的過程當中遇到的的問題是因爲iview默認校驗數據類型爲string,而偶爾其餘數據類型沒注意。iview的type驗證種類:dom

type: 'string', //iview默認校驗數據類型爲String
type: 'array',
type:'number'
type:'integer'  //Must be of type number and an integer.
type:'float'    //Must be of type number and a floating point number.
type:'boolean'
type:'object'   //Must be of type object and not Array.isArray.
type:'array'    //Must be an array as determined by Array.isArray.
type:'regexp'   //正則
type: 'email',
type: 'date', 		
type:'url'      //Must be of type url.
enum: Value must exist in the enum.
hex: Must be of type hex.

 更多iview驗證詳情見:https://github.com/yiminghe/async-validatorasync

例子:ide

<template>
    <Form ref="formValidate" :model="formValidate" :rules="ruleValidate" :label-width="80">
        <FormItem label="電話" prop="tel">
            <Input v-model="formValidate.mail" placeholder="請輸入號碼"></Input>
        </FormItem>
        <FormItem label="郵箱" prop="mail">
            <Input v-model="formValidate.mail" placeholder="Enter your e-mail"></Input>
        </FormItem>
        <FormItem label="城市" prop="city">
            <Select v-model="formValidate.city" placeholder="Select your city">
                <Option value="beijing">New York</Option>
                <Option value="shanghai">London</Option>
                <Option value="shenzhen">Sydney</Option>
            </Select>
        </FormItem>
        <FormItem label="日期">
            <Row>
                <Col span="11">
                    <FormItem prop="date">
                        <DatePicker type="date" placeholder="Select date" v-model="formValidate.date"></DatePicker>
                    </FormItem>
                </Col>
                <Col span="2" style="text-align: center">-</Col>
                <Col span="11">
                    <FormItem prop="time">
                        <TimePicker type="time" placeholder="Select time" v-model="formValidate.time"></TimePicker>
                    </FormItem>
                </Col>
            </Row>
        </FormItem>
        <FormItem label="性別" prop="gender">
            <RadioGroup v-model="formValidate.gender">
                <Radio label="man"></Radio>
                <Radio label="gril"></Radio>
            </RadioGroup>
        </FormItem>
        <FormItem label="愛好" prop="interest">
            <CheckboxGroup v-model="formValidate.interest">
                <Checkbox label="Eat"></Checkbox>
                <Checkbox label="Sleep"></Checkbox>
                <Checkbox label="Run"></Checkbox>
                <Checkbox label="Movie"></Checkbox>
            </CheckboxGroup>
        </FormItem>
        <FormItem label="備註" prop="desc">
            <Input v-model="formValidate.desc" type="textarea" :autosize="{minRows: 2,maxRows: 5}" placeholder="Enter something..."></Input>
        </FormItem>
        <FormItem>
            <Button type="primary" @click="handleSubmit('formValidate')">Submit</Button>
            <Button @click="handleReset('formValidate')" style="margin-left: 8px">Reset</Button>
        </FormItem>
    </Form>
</template>
<script> export default { const valideTel = (rule, value, callback) => { var re = /^1[0-9]{10}/
          if (value === '' || value === null) { callback(new Error('請輸入手機號')) } else if (!re.test(value)) { callback(new Error('請輸入正確手機號')) } else { callback() } } data () { return { formValidate: { mail: '', city: '', gender: 'male', interest: [], date: '', time: '', desc: '', tel:'' }, ruleValidate: { tel: [ { validator: valideTel, required: true, trigger: 'blur' } ], mail: [ { required: true, message: 'Mailbox cannot be empty', trigger: 'blur' }, { type: 'email', message: 'Incorrect email format', trigger: 'blur' } ], city: [ { required: true, message: 'Please select the city', trigger: 'change' } ], gender: [ { required: true, message: 'Please select gender', trigger: 'change' } ], interest: [ { required: true, type: 'array', min: 1, message: 'Choose at least one hobby', trigger: 'change' }, { type: 'array', max: 2, message: 'Choose two hobbies at best', trigger: 'change' } ], date: [ { required: true, type: 'date', message: 'Please select the date', trigger: 'change' } ], time: [ { required: true, type: 'string', message: 'Please select time', trigger: 'change' } ], desc: [ { required: true, message: 'Please enter a personal introduction', trigger: 'blur' }, { type: 'string', min: 20, message: 'Introduce no less than 20 words', trigger: 'blur' } ] } } }, methods: { handleSubmit (name) { this.$refs[name].validate((valid) => { if (valid) { this.$Message.success('Success!'); } else { this.$Message.error('Fail!'); } }) }, handleReset (name) { this.$refs[name].resetFields(); } } } </script>
相關文章
相關標籤/搜索