If you have technical questions, please create a support ticket in the DevExpress Support Center.
<div class="form">
<div class="dx-fieldset">
<div class="dx-field">
<div class="dx-field-label">Default mode</div>
<div class="dx-field-value">
<dx-text-box
value="John Smith"
[inputAttr]="{ 'aria-label': 'Name' }"
></dx-text-box>
</div>
</div>
<div class="dx-field">
<div class="dx-field-label">With placeholder</div>
<div class="dx-field-value">
<dx-text-box
placeholder="Enter full name here..."
[inputAttr]="{ 'aria-label': 'Full Name' }"
></dx-text-box>
</div>
</div>
<div class="dx-field">
<div class="dx-field-label">With clear button</div>
<div class="dx-field-value">
<dx-text-box
value="John Smith"
[showClearButton]="true"
[inputAttr]="{ 'aria-label': 'Name' }"
>
</dx-text-box>
</div>
</div>
<div class="dx-field">
<div class="dx-field-label">Password mode</div>
<div class="dx-field-value">
<dx-text-box
mode="password"
[inputAttr]="{ 'aria-label': 'Password' }"
placeholder="Enter password"
[showClearButton]="true"
value="f5lzKs0T"
></dx-text-box>
</div>
</div>
<div class="dx-field">
<div class="dx-field-label">Text mask</div>
<div class="dx-field-value">
<dx-text-box
mask="+1 (X00) 000-0000"
[maskRules]="rules"
[inputAttr]="{ 'aria-label': 'Mask' }"
>
</dx-text-box>
</div>
</div>
<div class="dx-field">
<div class="dx-field-label">Disabled</div>
<div class="dx-field-value">
<dx-text-box
value="John Smith"
[disabled]="true"
[inputAttr]="{ 'aria-label': 'Name' }"
>
</dx-text-box>
</div>
</div>
</div>
<div class="dx-fieldset">
<div class="dx-fieldset-header">Events and API</div>
<div class="dx-field">
<div class="dx-field-label">Full Name</div>
<div class="dx-field-value">
<dx-text-box
value="Smith"
[showClearButton]="true"
placeholder="Enter full name"
valueChangeEvent="keyup"
[inputAttr]="{ 'aria-label': 'Full Name' }"
(onValueChanged)="valueChanged($event)"
></dx-text-box>
</div>
</div>
<div class="dx-field">
<div class="dx-field-label">Email (read only)</div>
<div class="dx-field-value">
<dx-text-box
[readOnly]="true"
[hoverStateEnabled]="false"
[inputAttr]="{ 'aria-label': 'Email' }"
[(value)]="emailValue"
></dx-text-box>
</div>
</div>
</div>
</div>
xxxxxxxxxx
import { NgModule, Component, enableProdMode } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { DxTextBoxModule, DxTextBoxTypes } from 'devextreme-angular/ui/text-box';
if (!/localhost/.test(document.location.host)) {
enableProdMode();
}
let modulePrefix = '';
// @ts-ignore
if (window && window.config?.packageConfigPaths) {
modulePrefix = '/app';
}
@Component({
styleUrls: [`app/app.component.css`],
selector: 'demo-app',
templateUrl: `app/app.component.html`,
})
export class AppComponent {
emailValue = 'smith@corp.com';
rules = { X: /[02-9]/ };
valueChanged(data: DxTextBoxTypes.ValueChangedEvent) {
this.emailValue = `${data.value.replace(/\s/g, '').toLowerCase()}@corp.com`;
}
}
@NgModule({
imports: [
BrowserModule,
DxTextBoxModule,
],
declarations: [AppComponent],
bootstrap: [AppComponent],
})
export class AppModule { }
platformBrowserDynamic().bootstrapModule(AppModule);
xxxxxxxxxx
xxxxxxxxxx
// In real applications, you should not transpile code in the browser.
// You can see how to create your own application with Angular and DevExtreme here:
// https://js.devexpress.com/Documentation/Guide/Angular_Components/Getting_Started/Create_a_DevExtreme_Application/
const componentNames = [
'accordion',
'action-sheet',
'autocomplete',
'bar-gauge',
'box',
'bullet',
'button-group',
'button',
'calendar',
'chart',
'chat',
'check-box',
'circular-gauge',
'color-box',
'context-menu',
'data-grid',
'date-box',
'date-range-box',
'defer-rendering',
'diagram',
'draggable',
'drawer',
'drop-down-box',
'drop-down-button',
'file-manager',
'file-uploader',
'filter-builder',
'form',
'funnel',
'gallery',
'gantt',
'html-editor',
'linear-gauge',
'list',
'load-indicator',
'load-panel',
'lookup',
'map',
'menu',
'multi-view',
'nested',
'number-box',
'pagination',
'pie-chart',
'pivot-grid-field-chooser',
'pivot-grid',
'polar-chart',
'popover',
'popup',
'progress-bar',
'radio-group',
'range-selector',
'range-slider',
'recurrence-editor',
'resizable',
'responsive-box',
'sankey',
'scheduler',
'scroll-view',
'select-box',
'slider',
'sortable',
'sparkline',
'speed-dial-action',
'splitter',
'switch',
'tab-panel',
'tabs',
'tag-box',
'text-area',
'text-box',
'tile-view',
'toast',
'toolbar',
'tooltip',
'tree-list',
'tree-map',
'tree-view',
'validation-group',
'validation-summary',
'validator',
'vector-map',
];
window.exports = window.exports || {};
window.config = {
transpiler: 'ts',
typescriptOptions: {
module: 'system',
emitDecoratorMetadata: true,
experimentalDecorators: true,
},
meta: {
'typescript': {
'exports': 'ts',
},
'devextreme/time_zone_utils.js': {
'esModule': true,
},
'devextreme/localization.js': {
'esModule': true,
},
'devextreme/viz/palette.js': {
'esModule': true,
},
'@angular/platform-browser-dynamic': {
'esModule': true,
},
'@angular/platform-browser': {
'esModule': true,
},
'@angular/core': {
'esModule': true,
},
'@angular/common': {
'esModule': true,
},
'@angular/common/http': {
'esModule': true,
},
'@angular/animations': {
'esModule': true,
},
'@angular/forms': {
'esModule': true,
},
'openai': {
'esModule': true,
},
},
paths: {
'npm:': 'https://unpkg.com/',
'bundles:': 'bundles/',
'externals:': 'bundles/externals/',
},
map: {
'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js',
'typescript': 'npm:typescript@4.2.4/lib/typescript.js',
'jszip': 'npm:jszip@3.10.1/dist/jszip.min.js',
/* @angular */
'@angular/compiler': 'bundles:@angular/compiler.umd.js',
'@angular/platform-browser-dynamic': 'bundles:@angular/platform-browser-dynamic.umd.js',
'@angular/core': 'bundles:@angular/core.umd.js',
'@angular/core/primitives/signals': 'bundles:@angular/core.primitives.signals.umd.js',
'@angular/common': 'bundles:@angular/common.umd.js',
'@angular/common/http': 'bundles:@angular/common-http.umd.js',
'@angular/platform-browser': 'bundles:@angular/platform-browser.umd.js',
'@angular/platform-browser/animations': 'bundles:@angular/platform-browser.umd.js',
'@angular/forms': 'bundles:@angular/forms.umd.js',
/* devextreme */
'devextreme': 'npm:devextreme@24.2.6/cjs',
'@devextreme/runtime': 'npm:@devextreme/runtime@3.0.12',
'devextreme/bundles/dx.all': 'npm:devextreme@24.2.6/bundles/dx.all.js',
'devextreme-quill': 'npm:devextreme-quill@1.7.1/dist/dx-quill.min.js',
'devexpress-diagram': 'npm:devexpress-diagram@2.2.15',
'devexpress-gantt': 'npm:devexpress-gantt@4.1.60',
/* devextreme-angular umd maps */
'devextreme-angular': 'bundles:devextreme-angular/devextreme-angular.umd.js',
'devextreme-angular/core': 'bundles:devextreme-angular/devextreme-angular-core.umd.js',
'devextreme-angular/http': 'bundles:devextreme-angular/devextreme-angular-http.umd.js',
componentNames.reduce((acc, name) => {
acc[`devextreme-angular/ui/${name}`] = `bundles:devextreme-angular/devextreme-angular-ui-${name}.umd.js`;
acc[`devextreme-angular/ui/${name}/nested`] = `bundles:devextreme-angular/devextreme-angular-ui-${name}-nested.umd.js`;
return acc;
}, {}),
'tslib': 'npm:tslib/tslib.js',
'rxjs': 'npm:rxjs@7.5.3/dist/bundles/rxjs.umd.js',
'rxjs/operators': 'npm:rxjs@7.5.3/dist/cjs/operators/index.js',
'rrule': 'npm:rrule@2.6.4/dist/es5/rrule.js',
'luxon': 'npm:luxon@3.4.4/build/global/luxon.min.js',
'es6-object-assign': 'npm:es6-object-assign',
'inferno': 'npm:inferno@7.4.11/dist/inferno.min.js',
'inferno-compat': 'npm:inferno-compat/dist/inferno-compat.min.js',
'inferno-create-element': 'npm:inferno-create-element@7.4.11/dist/inferno-create-element.min.js',
'inferno-dom': 'npm:inferno-dom/dist/inferno-dom.min.js',
'inferno-hydrate': 'npm:inferno-hydrate/dist/inferno-hydrate.min.js',
'inferno-clone-vnode': 'npm:inferno-clone-vnode/dist/inferno-clone-vnode.min.js',
'inferno-create-class': 'npm:inferno-create-class/dist/inferno-create-class.min.js',
'inferno-extras': 'npm:inferno-extras/dist/inferno-extras.min.js',
// Prettier
'prettier/standalone': 'npm:prettier@2.8.8/standalone.js',
'prettier/parser-html': 'npm:prettier@2.8.8/parser-html.js',
},
packages: {
'app': {
main: './app.component.ts',
defaultExtension: 'ts',
},
'devextreme': {
defaultExtension: 'js',
},
'devextreme/events/utils': {
main: 'index',
},
'devextreme/events': {
main: 'index',
},
'es6-object-assign': {
main: './index.js',
defaultExtension: 'js',
},
'rxjs': {
defaultExtension: 'js',
},
'rxjs/operators': {
defaultExtension: 'js',
},
},
packageConfigPaths: [
'npm:@devextreme/*/package.json',
'npm:@devextreme/runtime@3.0.12/inferno/package.json',
'npm:rxjs@7.5.3/package.json',
'npm:rxjs@7.5.3/operators/package.json',
'npm:devexpress-diagram@2.2.15/package.json',
'npm:devexpress-gantt@4.1.60/package.json',
],
};
System.config(window.config);
// System.import('@angular/compiler').catch(console.error.bind(console));
xxxxxxxxxx
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head></head>
<body class="dx-viewport">
<div class="demo-container">
<demo-app>Loading...</demo-app>
</div>
</body>
</html>
This demo illustrates the following TextBox properties:
-
value
A value the TextBox displays. -
placeholder
An input prompt the TextBox displays when the value is not defined. -
showClearButton
Specifies whether to display the button that clears the TextBox value. -
mode
Affects a set of keyboard characters displayed on a mobile device when the TextBox gets focus and modifies the component's display style. In this example, the mode is set to "password" so that entered characters are obscured, and the password cannot be read. -
mask
An input mask. -
maskRules
Custom mask rules. -
disabled
Specifies whether the TextBox responds to user interaction. -
onValueChanged event handler
Use this function to perform an action when a user enters a new value. In this demo, this function uses the entered value to construct a dummy email address and assign it to another TextBox. -
valueChangeEvent
One or several DOM events that trigger the onValueChanged event handler. -
readOnly
Prevents users from changing the editor's value. -
hoverStateEnabled
Specifies whether the TextBox responds when users long press or hover the mouse pointer over it.