Your search did not match any results.
Diagram

Text Style

Note that the Diagram widget is in the community technology preview (CTP) development stage.

The Diagram widget allows you to bind a customShapes collection to a data source. In this demo, the collection is bound to an array of employee objects. The Diagram creates a shape for every employee data item in the data source and adds the shapes to the "employees" category.

The toolbox option allows you to add custom categories to a data toolbox.

Users can drag data items from the toolbox and drop them onto a canvas to create a diagram.

Copy to CodeSandBox
Apply
Reset
<dx-diagram #diagram id="diagram"> <dxi-custom-shape *ngFor="let emp of employees" category="employees" [type]='"employee" + emp.ID' baseType="rectangle" [defaultText]="emp.Full_Name" [allowEditText]="false"> </dxi-custom-shape> <dxo-toolbox> <dxi-group category="employees" title="Employees" displayMode="texts"></dxi-group> </dxo-toolbox> </dx-diagram>
import { NgModule, Component, ViewChild, enableProdMode } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { HttpClient, HttpClientModule } from '@angular/common/http'; import { DxDiagramModule, DxDiagramComponent } from 'devextreme-angular'; import { Service } from './app.service'; import ArrayStore from 'devextreme/data/array_store' import { Employee } from '../../../NodesArrayPlainStructure/Angular/app/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], preserveWhitespaces: true }) export class AppComponent { employees: Employee[]; @ViewChild(DxDiagramComponent, { static: false }) diagram: DxDiagramComponent; constructor(service: Service, http: HttpClient) { this.employees = service.getEmployees(); http.get('../../../../data/diagram-employees.json').subscribe(data => { this.diagram.instance.import(JSON.stringify(data)); }, err => { throw 'Data Loading Error' }); } } @NgModule({ imports: [ BrowserModule, HttpClientModule, DxDiagramModule ], declarations: [AppComponent], bootstrap: [AppComponent] }) export class AppModule { } platformBrowserDynamic().bootstrapModule(AppModule);
::ng-deep #diagram { height: 725px; }
import { Injectable } from '@angular/core'; export class Employee { ID: number; Head_ID: number; Full_Name: string; Prefix: string; Title: string; City: string; State: string; Email: string; Skype: string; Mobile_Phone: string; Birth_Date: string; Hire_Date: string; } let employees: Employee[] = [{ "ID": 1, "Head_ID": undefined, "Full_Name": "John Heart", "Prefix": "Mr.", "Title": "CEO", "City": "Los Angeles", "State": "California", "Email": "jheart@dx-email.com", "Skype": "jheart_DX_skype", "Mobile_Phone": "(213) 555-9392", "Birth_Date": "1964-03-16", "Hire_Date": "1995-01-15" }, { "ID": 2, "Head_ID": 1, "Full_Name": "Samantha Bright", "Prefix": "Dr.", "Title": "COO", "City": "Los Angeles", "State": "California", "Email": "samanthab@dx-email.com", "Skype": "samanthab_DX_skype", "Mobile_Phone": "(213) 555-2858", "Birth_Date": "1966-05-02", "Hire_Date": "2004-05-24" }, { "ID": 3, "Head_ID": 1, "Full_Name": "Arthur Miller", "Prefix": "Mr.", "Title": "CTO", "City": "Denver", "State": "Colorado", "Email": "arthurm@dx-email.com", "Skype": "arthurm_DX_skype", "Mobile_Phone": "(310) 555-8583", "Birth_Date": "1972-07-11", "Hire_Date": "2007-12-18" }, { "ID": 4, "Head_ID": 1, "Full_Name": "Robert Reagan", "Prefix": "Mr.", "Title": "CMO", "City": "Bentonville", "State": "Arkansas", "Email": "robertr@dx-email.com", "Skype": "robertr_DX_skype", "Mobile_Phone": "(818) 555-2387", "Birth_Date": "1974-09-07", "Hire_Date": "2002-11-08" }, { "ID": 5, "Head_ID": 1, "Full_Name": "Greta Sims", "Prefix": "Ms.", "Title": "HR Manager", "City": "Atlanta", "State": "Georgia", "Email": "gretas@dx-email.com", "Skype": "gretas_DX_skype", "Mobile_Phone": "(818) 555-6546", "Birth_Date": "1977-11-22", "Hire_Date": "1998-04-23" }, { "ID": 6, "Head_ID": 3, "Full_Name": "Brett Wade", "Prefix": "Mr.", "Title": "IT Manager", "City": "Reno", "State": "Nevada", "Email": "brettw@dx-email.com", "Skype": "brettw_DX_skype", "Mobile_Phone": "(626) 555-0358", "Birth_Date": "1968-12-01", "Hire_Date": "2009-03-06" }, { "ID": 7, "Head_ID": 5, "Full_Name": "Sandra Johnson", "Prefix": "Mrs.", "Title": "Controller", "City": "Beaver", "State": "Utah", "Email": "sandraj@dx-email.com", "Skype": "sandraj_DX_skype", "Mobile_Phone": "(562) 555-2082", "Birth_Date": "1974-11-15", "Hire_Date": "2005-05-11" }, { "ID": 8, "Head_ID": 4, "Full_Name": "Ed Holmes", "Prefix": "Dr.", "Title": "Sales Manager", "City": "Malibu", "State": "California", "Email": "edwardh@dx-email.com", "Skype": "edwardh_DX_skype", "Mobile_Phone": "(310) 555-1288", "Birth_Date": "1973-07-14", "Hire_Date": "2005-06-19" }, { "ID": 9, "Head_ID": 3, "Full_Name": "Barb Banks", "Prefix": "Mrs.", "Title": "Support Manager", "City": "Phoenix", "State": "Arizona", "Email": "barbarab@dx-email.com", "Skype": "barbarab_DX_skype", "Mobile_Phone": "(310) 555-3355", "Birth_Date": "1979-04-14", "Hire_Date": "2002-08-07" }, { "ID": 10, "Head_ID": 2, "Full_Name": "Kevin Carter", "Prefix": "Mr.", "Title": "Shipping Manager", "City": "San Diego", "State": "California", "Email": "kevinc@dx-email.com", "Skype": "kevinc_DX_skype", "Mobile_Phone": "(213) 555-2840", "Birth_Date": "1978-01-09", "Hire_Date": "2009-08-11" }, { "ID": 11, "Head_ID": 5, "Full_Name": "Cindy Stanwick", "Prefix": "Ms.", "Title": "HR Assistant", "City": "Little Rock", "State": "Arkansas", "Email": "cindys@dx-email.com", "Skype": "cindys_DX_skype", "Mobile_Phone": "(818) 555-6655", "Birth_Date": "1985-06-05", "Hire_Date": "2008-03-24" }, { "ID": 12, "Head_ID": 8, "Full_Name": "Sammy Hill", "Prefix": "Mr.", "Title": "Sales Assistant", "City": "Pasadena", "State": "California", "Email": "sammyh@dx-email.com", "Skype": "sammyh_DX_skype", "Mobile_Phone": "(626) 555-7292", "Birth_Date": "1984-02-17", "Hire_Date": "2012-02-01" }, { "ID": 13, "Head_ID": 10, "Full_Name": "Davey Jones", "Prefix": "Mr.", "Title": "Shipping Assistant", "City": "Pasadena", "State": "California", "Email": "davidj@dx-email.com", "Skype": "davidj_DX_skype", "Mobile_Phone": "(626) 555-0281", "Birth_Date": "1983-03-06", "Hire_Date": "2011-04-24" }, { "ID": 14, "Head_ID": 10, "Full_Name": "Victor Norris", "Prefix": "Mr.", "Title": "Shipping Assistant", "City": "Little Rock", "State": "Arkansas", "Email": "victorn@dx-email.com", "Skype": "victorn_DX_skype", "Mobile_Phone": "(213) 555-9278", "Birth_Date": "1986-07-23", "Hire_Date": "2012-07-23" }, { "ID": 15, "Head_ID": 10, "Full_Name": "Mary Stern", "Prefix": "Ms.", "Title": "Shipping Assistant", "City": "Beaver", "State": "Utah", "Email": "marys@dx-email.com", "Skype": "marys_DX_skype", "Mobile_Phone": "(818) 555-7857", "Birth_Date": "1982-04-08", "Hire_Date": "2012-08-12" }, { "ID": 16, "Head_ID": 10, "Full_Name": "Robin Cosworth", "Prefix": "Mrs.", "Title": "Shipping Assistant", "City": "Los Angeles", "State": "California", "Email": "robinc@dx-email.com", "Skype": "robinc_DX_skype", "Mobile_Phone": "(818) 555-0942", "Birth_Date": "1981-06-12", "Hire_Date": "2012-09-01" }, { "ID": 17, "Head_ID": 9, "Full_Name": "Kelly Rodriguez", "Prefix": "Ms.", "Title": "Support Assistant", "City": "Boise", "State": "Idaho", "Email": "kellyr@dx-email.com", "Skype": "kellyr_DX_skype", "Mobile_Phone": "(818) 555-9248", "Birth_Date": "1988-05-11", "Hire_Date": "2012-10-13" }, { "ID": 18, "Head_ID": 9, "Full_Name": "James Anderson", "Prefix": "Mr.", "Title": "Support Assistant", "City": "Atlanta", "State": "Georgia", "Email": "jamesa@dx-email.com", "Skype": "jamesa_DX_skype", "Mobile_Phone": "(323) 555-4702", "Birth_Date": "1987-01-29", "Hire_Date": "2012-10-18" }, { "ID": 19, "Head_ID": 9, "Full_Name": "Antony Remmen", "Prefix": "Mr.", "Title": "Support Assistant", "City": "Boise", "State": "Idaho", "Email": "anthonyr@dx-email.com", "Skype": "anthonyr_DX_skype", "Mobile_Phone": "(310) 555-6625", "Birth_Date": "1986-02-19", "Hire_Date": "2013-01-19" }, { "ID": 20, "Head_ID": 8, "Full_Name": "Olivia Peyton", "Prefix": "Mrs.", "Title": "Sales Assistant", "City": "Atlanta", "State": "Georgia", "Email": "oliviap@dx-email.com", "Skype": "oliviap_DX_skype", "Mobile_Phone": "(310) 555-2728", "Birth_Date": "1981-06-03", "Hire_Date": "2012-05-14" }, { "ID": 21, "Head_ID": 6, "Full_Name": "Taylor Riley", "Prefix": "Mr.", "Title": "Network Admin", "City": "San Jose", "State": "California", "Email": "taylorr@dx-email.com", "Skype": "taylorr_DX_skype", "Mobile_Phone": "(310) 555-7276", "Birth_Date": "1982-08-14", "Hire_Date": "2012-04-14" }, { "ID": 22, "Head_ID": 6, "Full_Name": "Amelia Harper", "Prefix": "Mrs.", "Title": "Network Admin", "City": "Los Angeles", "State": "California", "Email": "ameliah@dx-email.com", "Skype": "ameliah_DX_skype", "Mobile_Phone": "(213) 555-4276", "Birth_Date": "1983-11-19", "Hire_Date": "2011-02-10" }, { "ID": 23, "Head_ID": 6, "Full_Name": "Wally Hobbs", "Prefix": "Mr.", "Title": "Programmer", "City": "Chatsworth", "State": "California", "Email": "wallyh@dx-email.com", "Skype": "wallyh_DX_skype", "Mobile_Phone": "(818) 555-8872", "Birth_Date": "1984-12-24", "Hire_Date": "2011-02-17" }, { "ID": 24, "Head_ID": 6, "Full_Name": "Brad Jameson", "Prefix": "Mr.", "Title": "Programmer", "City": "San Fernando", "State": "California", "Email": "bradleyj@dx-email.com", "Skype": "bradleyj_DX_skype", "Mobile_Phone": "(818) 555-4646", "Birth_Date": "1988-10-12", "Hire_Date": "2011-03-02" }, { "ID": 25, "Head_ID": 6, "Full_Name": "Karen Goodson", "Prefix": "Miss", "Title": "Programmer", "City": "South Pasadena", "State": "California", "Email": "kareng@dx-email.com", "Skype": "kareng_DX_skype", "Mobile_Phone": "(626) 555-0908", "Birth_Date": "1987-04-26", "Hire_Date": "2011-03-14" }, { "ID": 26, "Head_ID": 5, "Full_Name": "Marcus Orbison", "Prefix": "Mr.", "Title": "Travel Coordinator", "City": "Los Angeles", "State": "California", "Email": "marcuso@dx-email.com", "Skype": "marcuso_DX_skype", "Mobile_Phone": "(213) 555-7098", "Birth_Date": "1982-03-02", "Hire_Date": "2005-05-19" }]; @Injectable() export class Service { getEmployees() { return employees; } }
// 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@8.0.0/lib/plugin.js', 'typescript': 'npm:typescript@3.4.5/lib/typescript.js', '@angular/core': 'npm:@angular/core@8.0.0/bundles/core.umd.js', '@angular/common': 'npm:@angular/common@8.0.0/bundles/common.umd.js', '@angular/compiler': 'npm:@angular/compiler@8.0.0/bundles/compiler.umd.js', '@angular/platform-browser': 'npm:@angular/platform-browser@8.0.0/bundles/platform-browser.umd.js', '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic@8.0.0/bundles/platform-browser-dynamic.umd.js', '@angular/router': 'npm:@angular/router@8.0.0/bundles/router.umd.js', '@angular/forms': 'npm:@angular/forms@8.0.0/bundles/forms.umd.js', '@angular/common/http': 'npm:@angular/common@8.0.0/bundles/common-http.umd.js', 'tslib': 'npm:tslib/tslib.js', 'rxjs': 'npm:rxjs@6.3.3', 'devextreme': 'npm:devextreme@19.2', 'jszip': 'npm:jszip@3.1.3/dist/jszip.min.js', 'quill': 'npm:quill@1.3.6/dist/quill.js', 'devexpress-diagram': 'npm:devexpress-diagram', 'devexpress-gantt': 'npm:devexpress-gantt', 'devextreme-angular': 'npm:devextreme-angular@19.2' }, packages: { 'app': { main: './app.component.ts', defaultExtension: 'ts' }, 'devextreme': { defaultExtension: 'js' }, 'rxjs': { main: 'index.js', defaultExtension: 'js' }, 'rxjs/operators': { main: 'index.js', 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/19.2.4/css/dx.common.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/19.2.4/css/dx.light.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/19.2.4/css/dx-diagram.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.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>