DevExtreme v24.1 is now available.

Explore our newest features/capabilities and share your thoughts with us.

Your search did not match any results.

Angular Tile View - Basics

The TileView component contains a collection of tiles. Tiles can store much more information than ordinary buttons, that is why they are very popular in apps designed for touch devices. This demo illustrates how to create a simple TileView.

Backend API
<dx-tile-view class="dx-tile-content"> <dxi-item *ngFor="let home of homes" [widthRatio]="home.widthRatio" [heightRatio]="home.heightRatio" > <div class="image" [style.background-image]="'url(' + home.ImageSrc + ')'" ></div> </dxi-item> </dx-tile-view>
import { NgModule, Component, enableProdMode } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { DxTileViewModule } from 'devextreme-angular'; import { Home, Service } from './app.service'; if (!/localhost/.test(document.location.host)) { enableProdMode(); } @Component({ selector: 'demo-app', templateUrl: `app/app.component.html`, styleUrls: [`app/app.component.css`], providers: [Service], }) export class AppComponent { homes: Home[]; constructor(service: Service) { this.homes = service.getHomes(); } } @NgModule({ imports: [ BrowserModule, DxTileViewModule, ], declarations: [AppComponent], bootstrap: [AppComponent], }) export class AppModule { } platformBrowserDynamic().bootstrapModule(AppModule);
::ng-deep .dx-tile-content .image { height: 100%; width: 100%; background-position: center; background-size: cover; display: block; }
import { Injectable } from '@angular/core'; export class Home { ID: string; Address: string; City: string; State: string; Price: number; ImageSrc: string; heightRatio?: number; widthRatio?: number; } const homes: Home[] = [{ ID: '1', Address: '652 Avonwick Gate', City: 'Toronto', State: 'ON', Price: 780000, ImageSrc: '../../../../images/gallery/1.jpg', }, { ID: '2', Address: '328 S Kerema Ave', City: 'Milford', State: 'CT', Price: 350000, ImageSrc: '../../../../images/gallery/3.jpg', }, { ID: '3', Address: '8512 Tanglewood Cir', City: 'Reform', State: 'AL', Price: 250000, ImageSrc: '../../../../images/gallery/6.jpg', widthRatio: 2, }, { ID: '4', Address: '6351 Forrest St', City: 'Jersey City', State: 'NJ', Price: 320000, ImageSrc: '../../../../images/gallery/14.jpg', }, { ID: '5', Address: '61207 16th St N', City: 'Moorhead', State: 'MN', Price: 1700000, ImageSrc: '../../../../images/gallery/5.jpg', heightRatio: 2, widthRatio: 2, }, { ID: '6', Address: '5119 Beryl Dr', City: 'San Antonio', State: 'TX', Price: 455000, ImageSrc: '../../../../images/gallery/4.jpg', }, { ID: '7', Address: '7121 Bailey St', City: 'Worcester', State: 'MA', Price: 555000, ImageSrc: '../../../../images/gallery/7.jpg', }, { ID: '8', Address: '82649 Topeka St', City: 'Riverbank', State: 'CA', Price: 1750000, ImageSrc: '../../../../images/gallery/2.jpg', heightRatio: 2, }, { ID: '9', Address: '7700 Elmwood Dr', City: 'Cleveland', State: 'OK', Price: 470000, ImageSrc: '../../../../images/gallery/17.jpg', heightRatio: 2, widthRatio: 2, }, { ID: '10', Address: '620201 Plymouth Rd', City: 'Detroit', State: 'MI', Price: 610000, ImageSrc: '../../../../images/gallery/8.jpg', }, { ID: '11', Address: '1198 Theresa Cir', City: 'Whitinsville', State: 'MA', Price: 320000, ImageSrc: '../../../../images/gallery/9.jpg', }, { ID: '12', Address: '4815 Warbler Ln', City: 'Rockport', State: 'TX', Price: 700000, ImageSrc: '../../../../images/gallery/12.jpg', }, { ID: '13', Address: '420234 Rogge St', City: 'Detroit', State: 'MI', Price: 320000, ImageSrc: '../../../../images/gallery/23.jpg', }, { ID: '14', Address: '114840 Interlake Ave N', City: 'Seattle', State: 'WA', Price: 400000, ImageSrc: '../../../../images/gallery/22.jpg', }, { ID: '15', Address: '13673 Pearl Dr #7', City: 'Monroe', State: 'MI', Price: 399000, ImageSrc: '../../../../images/gallery/20.jpg', }, { ID: '16', Address: '15447 Via Viento', City: 'Atascadero', State: 'CA', Price: 1100000, ImageSrc: '../../../../images/gallery/21.jpg', }]; @Injectable() export class Service { getHomes(): Home[] { return homes; } }
// 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', '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', '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/compiler': { 'esModule': true, }, '@angular/animations': { 'esModule': true, }, '@angular/forms': { 'esModule': true, }, }, paths: { 'npm:': 'https://unpkg.com/', 'bundles:': '../../../../bundles/', }, map: { 'ts': 'npm:plugin-typescript@4.2.4/lib/plugin.js', 'typescript': 'npm:typescript@4.2.4/lib/typescript.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.1.7/cjs', '@devextreme/runtime': 'npm:@devextreme/runtime@3.0.13', 'devextreme/bundles/dx.all': 'npm:devextreme@24.1.7/bundles/dx.all.js', 'devextreme-quill': 'npm:devextreme-quill@1.7.1/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.2.12', 'devexpress-gantt': 'npm:devexpress-gantt@4.1.56', /* 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`; return acc; }, {}), 'jszip': 'npm:jszip@3.10.1/dist/jszip.min.js', 'tslib': 'npm:tslib@2.6.1/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@1.28.1/build/global/luxon.min.js', 'es6-object-assign': 'npm:es6-object-assign@1.1.0', '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@7.4.11/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.13/inferno/package.json', 'npm:rxjs@7.5.3/package.json', 'npm:rxjs@7.5.3/operators/package.json', 'npm:devexpress-diagram@2.2.12/package.json', 'npm:devexpress-gantt@4.1.56/package.json', ], }; System.config(window.config); // System.import('@angular/compiler').catch(console.error.bind(console));
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <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=5.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/24.1.7/css/dx.light.css" /> <script src="https://unpkg.com/core-js@2.6.12/client/shim.min.js"></script> <script src="https://unpkg.com/zone.js@0.13.3/bundles/zone.umd.min.js"></script> <script src="https://unpkg.com/reflect-metadata@0.1.13/Reflect.js"></script> <script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></script> <script src="config.js"></script> <script> System.import("app").catch(console.error.bind(console)); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <demo-app>Loading...</demo-app> </div> </body> </html>