Your search did not match any results.
TreeView

Plain Data Structure

Documentation

The TreeView widget can display both hierarchical and plain data. In this demo, the TreeView data source is defined using a plain object. Notice that an image can be specified within an item of the data source. The default item template contains a specific field that allows displaying images without a custom item template.

Copy to Plunker
Apply
Reset
<div class="form"> <dx-tree-view id="simple-treeview" [items]="products" dataStructure="plain" parentIdExpr="categoryId" keyExpr="ID" displayExpr="name" [width]="300" (onItemClick)="selectItem($event)" ></dx-tree-view> <div id="product-details" *ngIf="currentItem.price"> <img [src]="currentItem.iconSrc" /> <div class="name">{{currentItem.name}}</div> <div class="price">{{"$" + currentItem.price}}</div> </div> </div>
import { NgModule, Component, enableProdMode } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { DxTreeViewModule } from 'devextreme-angular'; import { Product, 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 { products: Product[]; currentItem: Product; constructor(service: Service) { this.products = service.getProducts(); this.currentItem = this.products[0]; } selectItem(e) { this.currentItem = e.itemData; } } @NgModule({ imports: [ BrowserModule, DxTreeViewModule ], declarations: [AppComponent], bootstrap: [AppComponent] }) export class AppModule { } platformBrowserDynamic().bootstrapModule(AppModule);
/deep/ #simple-treeview, #product-details { display: inline-block; } /deep/ #product-details { vertical-align: top; width: 400px; height: 420px; margin-left: 20px; } /deep/ #product-details > img { border: none; height: 300px; width: 400px; } /deep/ #product-details > .name { text-align: center; font-size: 20px; } /deep/ #product-details > .price { text-align: center; font-size: 24px; } /deep/ .dark #product-details > div { color: #f0f0f0; } /deep/ .hidden { visibility: hidden; }
import { Injectable } from '@angular/core'; export class Product { ID: string; name: string; expanded?: boolean; categoryId?: string; iconSrc?: string; price?: number; } var products: Product[] = [ { ID: "1", name: "Stores", expanded: true }, { ID: "1_1", categoryId: "1", name: "Super Mart of the West", expanded: true }, { ID: "1_1_1", categoryId: "1_1", name: "Video Players" }, { ID: "1_1_1_1", categoryId: "1_1_1", name: "HD Video Player", iconSrc: "../../../../images/products/1.png", price: 220 }, { ID: "1_1_1_2", categoryId: "1_1_1", name: "SuperHD Video Player", iconSrc: "../../../../images/products/2.png", price: 270 }, { ID: "1_1_2", categoryId: "1_1", name: "Televisions", expanded: true }, { ID: "1_1_2_1", categoryId: "1_1_2", name: "SuperLCD 42", iconSrc: "../../../../images/products/7.png", price: 1200 }, { ID: "1_1_2_2", categoryId: "1_1_2", name: "SuperLED 42", iconSrc: "../../../../images/products/5.png", price: 1450 }, { ID: "1_1_2_3", categoryId: "1_1_2", name: "SuperLED 50", iconSrc: "../../../../images/products/4.png", price: 1600 }, { ID: "1_1_2_4", categoryId: "1_1_2", name: "SuperLCD 55", iconSrc: "../../../../images/products/6.png", price: 1750 }, { ID: "1_1_2_5", categoryId: "1_1_2", name: "SuperLCD 70", iconSrc: "../../../../images/products/9.png", price: 4000 }, { ID: "1_1_3", categoryId: "1_1", name: "Monitors" }, { ID: "1_1_3_1", categoryId: "1_1_3", name: "19\"", }, { ID: "1_1_3_1_1", categoryId: "1_1_3_1", name: "DesktopLCD 19", iconSrc: "../../../../images/products/10.png", price: 160 }, { ID: "1_1_4", categoryId: "1_1", name: "Projectors" }, { ID: "1_1_4_1", categoryId: "1_1_4", name: "Projector Plus", iconSrc: "../../../../images/products/14.png", price: 550 }, { ID: "1_1_4_2", categoryId: "1_1_4", name: "Projector PlusHD", iconSrc: "../../../../images/products/15.png", price: 750 } ]; @Injectable() export class Service { getProducts(): Product[] { return products; } }
// 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://github.com/DevExpress/devextreme-angular/blob/master/README.md System.config({ transpiler: 'ts', typescriptOptions: { module: "commonjs", emitDecoratorMetadata: true, experimentalDecorators: true }, meta: { 'typescript': { "exports": "ts" } }, paths: { 'npm:': 'https://unpkg.com/' }, map: { 'ts': 'npm:plugin-typescript@7.0.6/lib/plugin.js', 'typescript': 'npm:typescript@2.2.2/lib/typescript.js', '@angular/core': 'npm:@angular/core@4.1.0/bundles/core.umd.js', '@angular/common': 'npm:@angular/common@4.1.0/bundles/common.umd.js', '@angular/compiler': 'npm:@angular/compiler@4.1.0/bundles/compiler.umd.js', '@angular/platform-browser': 'npm:@angular/platform-browser@4.1.0/bundles/platform-browser.umd.js', '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic@4.1.0/bundles/platform-browser-dynamic.umd.js', '@angular/http': 'npm:@angular/http@4.1.0/bundles/http.umd.js', '@angular/router': 'npm:@angular/router@4.1.0/bundles/router.umd.js', '@angular/forms': 'npm:@angular/forms@4.1.0/bundles/forms.umd.js', 'rxjs': 'npm:rxjs@5.3.1', 'devextreme': 'npm:devextreme@17.2', 'jquery': 'npm:jquery@3.1.1/dist/jquery.min.js', 'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js', 'devextreme-angular': 'npm:devextreme-angular@17.2' }, packages: { 'app': { main: './app.component.ts', defaultExtension: 'ts' }, 'devextreme': { defaultExtension: 'js' }, 'devextreme-angular': { main: 'index.js', defaultExtension: 'js' } } });
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <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="https://cdn3.devexpress.com/jslib/17.2.3/css/dx.spa.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/17.2.3/css/dx.common.css" /> <link rel="dx-theme" data-theme="generic.light" href="https://cdn3.devexpress.com/jslib/17.2.3/css/dx.light.css" /> <script src="https://unpkg.com/core-js@2.4.1/client/shim.min.js"></script> <script src="https://unpkg.com/zone.js@0.6.25/dist/zone.js"></script> <script src="https://unpkg.com/reflect-metadata@0.1.3/Reflect.js"></script> <script src="https://unpkg.com/systemjs@0.19.31/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>