# Form ### Install ```js import Vue from 'vue'; import { Form } from 'vant'; Vue.use(Form); ``` ## Usage ### Basic Usage ```html
Submit
``` ```js export default { data() { return { username: '', password: '', }; }, methods: { onSubmit(values) { console.log('submit', values); }, }, }; ``` ### Validate Rules ```html
Submit
``` ```js import { Toast } from 'vant'; export default { data() { this.phoneRules = [ { required: true, message: 'Phone is required' }, { validator: this.phoneValidator, message: 'Incorrect phone' }, ]; this.codeRules = [ { required: true, message: 'Code is required' }, { validator: this.codeValidator, message: 'Incorrect code' }, ]; return { code: '', phone: '', }; }, methods: { phoneValidator(val) { return /1\d{10}/.test(val); }, codeValidator(val) { return new Promise(resolve => { Toast.loading('Validating...'); setTimeout(() => { Toast.clear(); resolve(/\d{6}/.test(val)); }, 1000); }); }, onSubmit(values) { console.log('submit', values); }, onFailed(errorInfo) { console.log('failed', errorInfo); }, }, }; ``` ### Field Type - Switch ```html ``` ```js export default { data() { return { switchChecked: false, }; }, }; ``` ### Field Type - Checkbox ```html Checkbox 1 Checkbox 2 ``` ```js export default { data() { return { checkbox: false, checkboxGroup: [], }; }, }; ``` ### Field Type - Radio ```html Radio 1 Radio 2 ``` ```js export default { data() { return { radio: '1', }; }, }; ``` ### Field Type - Stepper ```html ``` ```js export default { data() { return { stepper: 1, }; }, }; ``` ### Field Type - Rate ```html ``` ```js export default { data() { return { rate: 3, }; }, }; ``` ### Field Type - Slider ```html ``` ```js export default { data() { return { slider: 50, }; }, }; ``` ### Field Type - Uploader ```html ``` ```js export default { data() { return { uploader: [{ url: 'https://img.yzcdn.cn/vant/leaf.jpg' }], }; }, }; ``` ### Field Type - Picker ```html ``` ```js export default { data() { return { value: '', columns: ['Delaware', 'Florida', 'Georqia', 'Indiana', 'Maine'], showPicker: false, }; }, methods: { onConfirm(value) { this.value = value; this.showPicker = false; }, }, }; ``` ### Field Type - DatetimePicker ```html ``` ```js export default { data() { return { value: '', showPicker: false, }; }, methods: { onConfirm(time) { this.value = time; this.showPicker = false; }, }, }; ``` ### Field Type - Area ```html ``` ```js export default { data() { return { value: '', showArea: false, areaList: {}, }; }, methods: { onConfirm(values) { this.value = values.map(item => item.name).join('/'); this.showArea = false; }, }, }; ``` ### Field Type - Calendar ```html ``` ```js export default { data() { return { value: '', showCalendar: false, }; }, methods: { onConfirm(date) { this.value = `${date.getMonth() + 1}/${date.getDate()}`; this.showCalendar = false; }, }, }; ``` ## API ### Props | Attribute | Description | Type | Default | |------|------|------|------| | validate-first | Whether to stop the validation when a rule fails | *boolean* | `false` | ### Events | Event | Description | Arguments | |------|------|------| | submit | Triggered after submitting the form and validation passed | *values: object* | | failed | Triggered after submitting the form and validation failed | *errorInfo: { values: object, errors: object[] }* | ### Methods Use [ref](https://vuejs.org/v2/api/#ref) to get Form instance and call instance methods | Name | Description | Attribute | Return value | |------|------|------|------| | validate | Validate form | *name?: string* | *Promise* | | resetValidation | Reset validation | *name?: string* | - | ### Slots | Name | Description | | ---- | ----------- | | default | Form content |