If you have technical questions, please create a support ticket in the DevExpress Support Center.
<div class="dx-fieldset">
<div class="fields-container">
<div class="dx-field">
<div class="dx-field-label">Built-in icon</div>
<div class="dx-field-value">
<dx-button
icon="check"
type="success"
text="Done"
(onClick)="doneClick()"
>
</dx-button>
</div>
</div>
<div class="dx-field">
<div class="dx-field-label">Image icon</div>
<div class="dx-field-value">
<dx-button
icon="images/icons/weather.png"
text="Weather"
(onClick)="weatherClick()"
>
</dx-button>
</div>
</div>
<div class="dx-field">
<div class="dx-field-label">External icon</div>
<div class="dx-field-value">
<dx-button
class="send"
icon="fa fa-envelope-o"
text="Send"
(onClick)="sendClick()"
>
</dx-button>
</div>
</div>
<div class="dx-field">
<div class="dx-field-label">Icon only</div>
<div class="dx-field-value">
<dx-button icon="plus" (onClick)="plusClick()"> </dx-button>
<dx-button icon="back" (onClick)="backClick()" id="icon-back">
</dx-button>
</div>
</div>
</div>
</div>
<div class="dx-fieldset">
<div class="dx-fieldset-header">DISABLED</div>
<div class="fields-container">
<div class="dx-field">
<div class="dx-field-value">
<dx-button icon="check" type="success" text="Done" [disabled]="true">
</dx-button>
</div>
</div>
<div class="dx-field">
<div class="dx-field-value">
<dx-button
icon="images/icons/weather.png"
text="Weather"
[disabled]="true"
>
</dx-button>
</div>
</div>
<div class="dx-field">
<div class="dx-field-value">
<dx-button
class="send"
icon="fa fa-envelope-o"
text="Send"
[disabled]="true"
>
</dx-button>
</div>
</div>
<div class="dx-field">
<div class="dx-field-value">
<dx-button icon="plus" [disabled]="true"> </dx-button>
<dx-button icon="back" [disabled]="true" id="icon-disabled-back">
</dx-button>
</div>
</div>
</div>
</div>
xxxxxxxxxx
import { Component, NgModule, enableProdMode } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { DxButtonModule } from 'devextreme-angular';
import notify from 'devextreme/ui/notify';
if (!/localhost/.test(document.location.host)) {
enableProdMode();
}
let modulePrefix = '';
// @ts-ignore
if (window && window.config?.packageConfigPaths) {
modulePrefix = '/app';
}
@Component({
selector: 'demo-app',
templateUrl: `app/app.component.html`,
styleUrls: [`app/app.component.css`],
preserveWhitespaces: true,
})
export class AppComponent {
weatherClick() {
notify('The Weather button was clicked');
}
doneClick() {
notify('The Done button was clicked');
}
sendClick() {
notify('The Send button was clicked');
}
plusClick() {
notify('The button was clicked');
}
backClick() {
notify('The button was clicked');
}
}
@NgModule({
imports: [
BrowserModule,
DxButtonModule,
],
declarations: [AppComponent],
bootstrap: [AppComponent],
})
export class AppModule { }
platformBrowserDynamic().bootstrapModule(AppModule);
xxxxxxxxxx
#icon-back,
#icon-disabled-back {
margin-left: 4px;
}
::ng-deep .dx-viewport .dx-fieldset {
width: 520px;
margin: 30px auto;
}
::ng-deep .dx-viewport .dx-fieldset:first-child {
margin-top: 120px;
}
::ng-deep .dx-viewport .dx-fieldset-header {
font-size: 16px;
}
::ng-deep .dx-viewport .dx-field {
display: inline-block;
margin-right: 20px;
}
::ng-deep .dx-viewport .dx-field-value:not(.dx-widget) > .dx-button {
float: none;
}
::ng-deep .dx-viewport .dx-field-value:not(.dx-switch):not(.dx-checkbox):not(.dx-button),
::ng-deep .dx-viewport .dx-field-label {
float: none;
width: 100%;
}
::ng-deep .dx-viewport .dx-field-label {
padding-left: 0;
}
::ng-deep .send .dx-button-content .dx-icon {
font-size: 18px;
}
.fields-container {
display: flex;
align-items: baseline;
}
::ng-deep .dx-field-value {
display: flex;
}
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.5/cjs',
'@devextreme/runtime': 'npm:@devextreme/runtime@3.0.12',
'devextreme/bundles/dx.all': 'npm:devextreme@24.2.5/bundles/dx.all.js',
'devextreme-quill': 'npm:devextreme-quill@1.7.1/dist/dx-quill.min.js',
'devexpress-diagram': 'npm:devexpress-diagram@2.2.5',
'devexpress-gantt': 'npm:devexpress-gantt@4.1.54',
/* 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.5/package.json',
'npm:devexpress-gantt@4.1.54/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>
-
Built-in icons
DevExtreme ships with its own icon library. Pick any icon and assign its name to the icon property. -
Image file
Set the icon value to the image file path or URI. -
3rd-party icon fonts
You can import a 3rd-party font library (this example uses Font Awesome). In such cases, set the icon property to a name that identifies the required glyph. Look up names in the imported library's documentation. -
Buttons with icons and no caption text
Define the icon, but do not define the text property. You can use the hint property to annotate the button.
Refer to the Icons help topic for additional information.