Vue Common - Utils - ui - themes
An object that serves as a namespace for the methods that work with DevExtreme CSS Themes.
current(themeName)
Sets a theme with a specific name.
The theme's name.
The theme name passed as a parameter should be the value of the data-theme attribute used within the rel="dx-theme" links to the theme. For instance, if you have links to two of your themes...
<link rel="dx-theme" data-theme="generic.dark" href="css/mytheme-dark.css" data-active="true"> <link rel="dx-theme" data-theme="generic.light" href="css/mytheme-light.css" data-active="false">
... you can switch between them as shown in the code below. Note that you should specify a callback function that repaints all UI components after the theme has been loaded using the ready(callback) method.
jQuery
DevExpress.ui.themes.ready(function () {
$("#dataGridContainer").dxDataGrid("repaint");
// Call other UI components' repaint() method here
});
DevExpress.ui.themes.current('generic.light');
// DevExpress.ui.themes.current('generic.dark');Angular
import themes from "devextreme/ui/themes";
import { Component, ViewChild } from "@angular/core";
import { DxDataGridComponent, DxButtonComponent } from "devextreme-angular";
@Component({
selector: 'my-app',
template: `
<dx-data-grid [dataSource]="dataSource"></dx-data-grid>
<dx-button text="Change Theme" (onClick)="changeTheme()"></dx-button>
`
})
export class AppComponent {
@ViewChild(DxDataGridComponent, { static: false }) dataGrid: DxDataGridComponent;
@ViewChild(DxButtonComponent, { static: false }) button: DxButtonComponent;
// Prior to Angular 8
// @ViewChild(DxDataGridComponent) dataGrid: DxDataGridComponent;
// @ViewChild(DxButtonComponent) button: DxButtonComponent;
changeTheme() {
themes.ready(() => {
this.dataGrid.instance.repaint();
this.button.instance.repaint();
});
themes.current('generic.light');
// themes.current('generic.dark');
}
}Vue
<template>
<DxDataGrid ...
:ref="dataGridRefKey"
/>
<DxButton
:ref="buttonRefKey"
text="Change Theme"
@click="changeTheme"
/>
</template>
<script>
import DxDataGrid from 'devextreme-vue/data-grid';
import DxButton from 'devextreme-vue/button';
const dataGridRefKey = 'my-data-grid';
const buttonRefKey = 'my-button';
export default {
components: {
DxDataGrid,
DxButton
},
data() {
return {
dataGridRefKey,
buttonRefKey
}
},
computed: {
dataGrid: function () {
return this.$refs[dataGridRefKey].instance;
},
button: function () {
return this.$refs[buttonRefKey].instance;
}
},
methods: {
changeTheme() {
themes.ready(() => {
this.dataGrid.repaint();
this.button.repaint();
});
themes.current('generic.light');
// themes.current('generic.dark');
}
}
}
</script>React
import React from 'react';
import DataGrid from 'devextreme-react/data-grid';
import Button from 'devextreme-react/button';
import themes from 'devextreme/ui/themes';
export default function App() {
const dataGrid = React.useRef(null);
const button = React.useRef(null);
const changeTheme = React.useCallback(() => {
themes.ready(() => {
dataGrid.current.instance().repaint();
button.current.instance().repaint();
});
themes.current('generic.light');
// themes.current('generic.dark');
}, []);
return (
<React.Fragment>
<DataGrid ...
ref={dataGrid}
/>
<Button
ref={button}
text="Change Theme"
onClick={changeTheme}
/>
</React.Fragment>
);
}Refer to the Predefined Themes article for details on the themes that are supplied with DevExtreme.
initialized(callback)
Specifies a function to be executed after a theme is loaded.
The function.
In some situations, UI components may apply their configuration or calculate their sizes before a theme is loaded. If you encounter issues with component appearance, use initialized(callback) to ensure that all styles are applied:
Angular
import themes from 'devextreme/ui/themes';
// ...
themes.initialized(() => {
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.error(err));
});Vue
import { createApp } from "vue";
import App from "./App.vue";
import themes from "devextreme/ui/themes";
themes.initialized(() => createApp(App).mount("#app"));React
import React from "react";
import ReactDOM from "react-dom";
import App from "./App.js";
import themes from "devextreme/ui/themes";
themes.initialized(() =>
ReactDOM.render(<App />, document.getElementById("app"))
);ready(callback)
Specifies a function to be executed each time a theme is switched.
The function.
Refer to the current(themeName) description for a code example.
If you have technical questions, please create a support ticket in the DevExpress Support Center.