Repeat multiple elements ​
Learn how to have multiple instances of the same element set.
To repeat multiple elements we can use ListElement with object option or with an ObjectElement when using inline mode:
template
<template>
<Vueform>
<ListElement name="work_history" label="Work history" :add-classes="{
ListElement: {
listItem: 'pt-6 mt-2 border-t border-gray-200'
},
ElementLabel: {
wrapper: 'text-[20px] font-semibold mb-4'
},
}">
<template #default="{ index }">
<ObjectElement :name="index">
<TextElement name="company" label="Company" />
<TextElement name="role" label="Role" />
<DateElement name="from" label="From" :columns="6" />
<DateElement
name="to"
label="To"
:columns="6"
:conditions="[
['work_history.*.current', false]
]"
/>
<CheckboxElement
name="current"
text="Currently working here"
:columns="6"
:add-classes="(form$, el$) => ({
CheckboxElement: {
container: {
'mt-9': el$.value
}
}
})"
/>
</ObjectElement>
</template>
</ListElement>
</Vueform>
</template>vue
<template>
<Vueform :schema />
</template>
<script setup>
import { ref } from 'vue'
const schema = ref({
work_history: {
type: 'list',
label: 'Work history',
addClasses: {
ListElement: {
listItem: 'pt-6 mt-2 border-t border-gray-200'
},
ElementLabel: {
wrapper: 'text-[20px] font-semibold mb-4'
},
},
object: {
schema: {
company: {
type: 'text',
label: 'Company',
},
role: {
type: 'text',
label: 'Role',
},
from: {
type: 'Date',
label: 'From',
columns: 6,
},
to: {
type: 'Date',
label: 'To',
columns: 6,
conditions: [
['work_history.*.current', false],
],
},
current: {
type: 'checkbox',
text: 'Currently working here',
columns: 6,
addClasses: (form$, el$) => ({
CheckboxElement: {
container: {
'mt-9': el$.value
}
},
})
}
}
}
},
})
</script>