Form Elements
vue-formily has 3 base form elements classes: Field, Group and Collection.
Field
A Field represents a single field in a form. E.g, username, email, password... Each Field will have one of these types: string
, number
, boolean
, date
. And its value will be casted to the relevant type
automatically, if the value can not cast, the it will be set to null
. For example:
const field = new Field({
formId: 'age',
type: 'number'
});
await field.setValue('1'); // field.value === 1
await field.setValue('1a'); // field.value === null
Schema
To learn about the schema, please read the document.
Here are some usages:
// Properties
{
formId: 'age',
type: 'number',
props: {
placeholder: 'Age',
label: 'Age'
}
}
// Default and initial value
{
formId: 'name',
type: 'string',
// The field will have this value when it was reset
default: 'John',
// The field will have this value on first init
value: 'Smith'
}
// Validation
{
formId: 'name',
type: 'string',
rules: [
// Use default
requried,
// Override
{
...requried,
message: 'This field is required.'
}
]
}
Checked State
When working with checkbox or radio, it's handy if we can handle the checked state. And you can handle it through the checkedValue
if schema:
const field = new Field({
formId: 'name',
type: 'string',
checkedValue: 'test'
});
await field.setValue('test'); // field.checked === true
You can set the checkedValue
in code:
const field = new Field({
formId: 'name',
type: 'string'
});
field.setCheckedValue('test');
await field.setValue('test'); // field.checked === true
Group
A Group is a container for other form elements such as: Field
, Collection
or event another Group
. Group has the type is enum
, that mean its value is an object that has the value of all sub-elements. For example:
const group = new Group({
formId: 'user',
fields: [
{
formId: 'firstName',
value: 'John'
},
{
formId: 'lastName',
value: 'Smith'
}
]
});
console.log(group.value); // { fisrtName: 'John', lasName: 'Smith' }
Schema
To learn about the schema, please read the document.
Here are the example:
{
formId: 'user',
fields: [
{
formId: 'firstName',
value: 'John'
},
{
formId: 'lastName',
value: 'Smith'
}
],
// Add some validation for this group
rules: [
// Required all sub-elements have to have value
requried
]
}
Here is the demo on Codepen:
Collection
A Collection is a list of groups, it's useful when you need to design a form that contains a list of items such as: addresses, cards, skills... Collection has the type is set
, that mean its value is an array that has the value of all sub-groups. For example:
const collection = new Collection({
formId: "skills",
group: {
fields: [
{
formId: "name"
},
{
formId: "description"
}
]
}
});
const group = collection.addGroup();
await group.setValue({
name: 'FE',
description: 'Frontend Developers are awesome!'
});
console.log(collection.value); // [{ name: 'FE', description: 'Frontend Developers are awesome!' }]
Here is the demo on Codepen:
Schema
To learn about the schema, please read the document.
Here are the example:
{
formId: "addresses",
props: {
label: "Addresses"
},
group: {
fields: [
{
formId: "address",
props: {
label: "Address"
}
},
{
formId: "city",
props: {
label: "City"
}
},
{
formId: "postcode",
props: {
label: "Postcode"
}
}
]
}
}
We have defined a collection schema named addresses
, it has the group
field which is actually the Group schema but drop the formId
field. Because, in collection formId
is not fixed, and will be auto generated when a new group is added. A collection can contain many groups inside it, and a group can be added dynamically by calling the collection.addGroup()
method.