mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
Form
Install
import Vue from 'vue';
import { Form } from 'vant';
Vue.use(Form);
Usage
Basic Usage
<van-form @submit="onSubmit">
<van-field
v-model="username"
name="Username"
label="Username"
placeholder="Username"
:rules="[{ required: true, message: 'Username is required' }]"
/>
<van-field
v-model="password"
type="password"
name="Password"
label="Password"
placeholder="Password"
:rules="[{ required: true, message: 'Password is required' }]"
/>
<div style="margin: 16px;">
<van-button round block type="info">Submit</van-button>
</div>
</van-form>
export default {
data() {
return {
username: '',
password: '',
};
},
methods: {
onSubmit(values) {
console.log('submit', values);
},
},
};
Validate Rules
<van-form @submit="onSubmit" @failed="onFailed">
<van-field v-model="value" name="phone" label="Phone" :rules="rules.phone" />
<van-field v-model="code" name="code" label="Code" :rules="rules.code" />
<div style="margin: 16px;">
<van-button round block type="info">Submit</van-button>
</div>
</van-form>
import { Toast } from 'vant';
export default {
data() {
this.rules = {
phone: [
{ required: true, message: 'Phone is required' },
{ validator: val => this.validatePhone, message: 'Incorrect phone' },
],
code: [
{ required: true, message: 'Code is required' },
{ validator: this.validateCode, message: 'Incorrect code' },
],
};
return { value: '' };
},
methods: {
validatePhone(val) {
return /1\d{10}/.test(val);
},
validateCode(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
<van-field name="switch" label="Switch">
<van-switch v-model="switchChecked" slot="input" size="20" />
</van-field>
export default {
data() {
return {
switchChecked: false,
};
},
};
Field Type - Checkbox
<van-field name="checkbox" label="Checkbox">
<van-checkbox v-model="checkbox" slot="input" shape="square" />
</van-field>
<van-field name="checkboxGroup" label="CheckboxGroup">
<van-checkbox-group
v-model="checkboxGroup"
slot="input"
direction="horizontal"
>
<van-checkbox name="1" shape="square">Checkbox 1</van-checkbox>
<van-checkbox name="2" shape="square">Checkbox 2</van-checkbox>
</van-checkbox-group>
</van-field>
export default {
data() {
return {
checkbox: false,
checkboxGroup: [],
};
},
};
Field Type - Radio
<van-field name="radio" label="Radio">
<van-radio-group v-model="radio" direction="horizontal" slot="input">
<van-radio name="1">Radio 1</van-radio>
<van-radio name="2">Radio 2</van-radio>
</van-radio-group>
</van-field>
export default {
data() {
return {
radio: '1',
};
},
};
Field Type - Stepper
<van-field name="stepper" label="Stepper">
<van-stepper v-model="stepper" slot="input" />
</van-field>
export default {
data() {
return {
stepper: 1,
};
},
};
Field Type - Rate
<van-field name="rate" label="Rate">
<van-rate v-model="rate" slot="input" />
</van-field>
export default {
data() {
return {
rate: 3,
};
},
};
Field Type - Slider
<van-field name="slider" label="Slider">
<van-slider v-model="slider" slot="input" />
</van-field>
export default {
data() {
return {
slider: 50,
};
},
};
Field Type - Uploader
<van-field name="uploader" label="Uploader">
<van-uploader v-model="uploader" slot="input" />
</van-field>
export default {
data() {
return {
uploader: [{ url: 'https://img.yzcdn.cn/vant/leaf.jpg' }],
};
},
};
Field Type - Picker
<van-field
readonly
clickable
name="picker"
:value="value"
label="Picker"
placeholder="Select city"
@click="showPicker = true"
/>
<van-popup v-model="showPicker" position="bottom">
<van-picker
show-toolbar
:columns="columns"
@confirm="onConfirm"
@cancel="showPicker = false"
/>
</van-popup>
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
<van-field
readonly
clickable
name="datetimePicker"
:value="value"
label="Datetime Picker"
placeholder="Select time"
@click="showPicker = true"
/>
<van-popup v-model="showPicker" position="bottom">
<van-datetime-picker
type="time"
@confirm="onConfirm"
@cancel="showPicker = false"
/>
</van-popup>
export default {
data() {
return {
value: '',
showPicker: false,
};
},
methods: {
onConfirm(time) {
this.value = time;
this.showPicker = false;
},
},
};
Field Type - Area
<van-field
readonly
clickable
name="area"
:value="value"
label="Area Picker"
placeholder="Select area"
@click="showArea = true"
/>
<van-popup v-model="showArea" position="bottom">
<van-area
:area-list="areaList"
@confirm="onConfirm"
@cancel="showArea = false"
/>
</van-popup>
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
<van-field
readonly
clickable
name="calendar"
:value="value"
label="Calendar"
placeholder="Select date"
@click="showCalendar = true"
/>
<van-calendar v-model="showCalendar" @confirm="onConfirm" />
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 |
---|
Events
| Event | Description | Arguments |
Slots
Name | Description |
---|