Help us shape the 2021 DevExtreme Roadmap. Take our 5 minute survey.
Your search did not match any results.

Customize Item


The Form UI component can create form items automatically for each field of the formData object. If you’d prefer to configure form items manually, pass the required array of configuration objects to the items property. You can specify the name of the bound data field, editor type, editor configuration, validation properties (etc.) for each form item.

Copy to CodeSandBox
<template> <div> <div class="long-title"><h3>Employee Details</h3></div> <div id="form-container"> <DxForm id="form" :on-content-ready="validateForm" :col-count="2" :form-data="employee" > <DxItem :editor-options="{disabled: true}" data-field="FirstName" /> <DxItem :editor-options="{value: '', searchEnabled: true, items: positions}" :validation-rules="validationRules.position" data-field="Position" editor-type="dxSelectBox" /> <DxItem :editor-options="{disabled: true}" data-field="LastName" /> <DxItem :editor-options="{value: null, width: '100%'}" :validation-rules="validationRules.hireDate" data-field="HireDate" editor-type="dxDateBox" /> <DxItem :editor-options="{disabled: true, width: '100%'}" data-field="BirthDate" editor-type="dxDateBox" /> <DxItem data-field="Address" /> <DxItem :col-span="2" :editor-options="{height: 90}" data-field="Notes" editor-type="dxTextArea" /> <DxItem :editor-options="{mask: '+1 (X00) 000-0000', maskRules: { 'X': /[02-9]/ } }" data-field="Phone" /> <DxItem data-field="Email" /> </DxForm> </div> </div> </template> <script> import { DxForm, DxItem } from 'devextreme-vue/form'; import service from './data.js'; import 'devextreme-vue/text-area'; export default { components: { DxForm, DxItem }, data() { const employee = service.getEmployee(); const positions = service.getPositions(); return { employee, positions, validationRules: { position: [ { type: 'required', message: 'Position is required.' }, ], hireDate: [ { type: 'required', message: 'Hire Date is required.' } ] } }; }, methods: { validateForm(e) { e.component.validate(); } } }; </script> <style scoped> #form-container { margin: 10px 10px 30px; } .long-title h3 { font-family: 'Segoe UI Light', 'Helvetica Neue Light', 'Segoe UI', 'Helvetica Neue', 'Trebuchet MS', Verdana; font-weight: 200; font-size: 28px; text-align: center; margin-bottom: 20px; } </style>
import { createApp } from 'vue'; import App from './App.vue'; createApp(App).mount('#app');
<!DOCTYPE html> <html> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <link rel="stylesheet" type="text/css" href="" /> <link rel="stylesheet" type="text/css" href="" /> <link rel="stylesheet" type="text/css" href="" /> <script src=""></script> <script src=""></script> <script type="text/javascript" src="config.js"></script> <script type="text/javascript"> System.import('./index.js'); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"> </div> </div> </body> </html>
const employee = { ID: 1, FirstName: 'John', LastName: 'Heart', Position: 'CEO', BirthDate: '1964/03/16', HireDate: '1995/01/15', Notes: 'John has been in the Audio/Video industry since 1990. He has led DevAv as its CEO since 2003.\r\n\r\nWhen not working hard as the CEO, John loves to golf and bowl. He once bowled a perfect game of 300.', Address: '351 S Hill St., Los Angeles, CA', Phone: '360-684-1334', Email: '' }; const positions = [ 'HR Manager', 'IT Manager', 'CEO', 'Controller', 'Sales Manager', 'Support Manager', 'Shipping Manager' ]; export default { getEmployee() { return employee; }, getPositions() { return positions; } };
System.config({ transpiler: 'plugin-babel', meta: { '*.vue': { loader: 'vue-loader' }, 'devextreme/localization.js': { "esModule": true }, }, paths: { 'npm:': '' }, map: { 'vue': 'npm:vue@3.0.0/dist/vue.esm-browser.js', 'vue-loader': 'npm:dx-systemjs-vue-browser@1.0.15/index.js', 'mitt': 'npm:mitt/dist/mitt.umd.js', 'rrule': 'npm:rrule@2.6.6/dist/es5/rrule.js', 'luxon': 'npm:luxon@1.25.0/build/global/luxon.min.js', 'es6-object-assign': 'npm:es6-object-assign@1.1.0', 'devextreme': 'npm:devextreme@20.2.5', 'devextreme-vue': 'npm:devextreme-vue@20.2.5', 'jszip': 'npm:jszip@3.5.0/dist/jszip.min.js', 'devextreme-quill': 'npm:devextreme-quill@0.9.8/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.0.11/dist/dx-diagram.js', 'devexpress-gantt': 'npm:devexpress-gantt@2.0.18/dist/dx-gantt.js', 'preact': 'npm:preact@10.5.11/dist/preact.js', 'preact/hooks': 'npm:preact@10.5.11/hooks/dist/hooks.js', 'plugin-babel': 'npm:systemjs-plugin-babel@0.0.25/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel@0.0.25/systemjs-babel-browser.js' }, packages: { 'devextreme-vue': { main: 'index.js' }, 'devextreme': { defaultExtension: 'js' }, 'devextreme/events/utils': { main: 'index' }, 'devextreme/events': { main: 'index' }, 'es6-object-assign': { main: './index.js', defaultExtension: 'js' } }, babelOptions: { sourceMaps: false, stage0: true } });