nodes
and connectors
based on the information provided from an external data source.dataManager
property is used to define the data source either as a collection of objects or as an instance of DataManager
that needs to be populated in the diagram.ID
property is used to define the unique field of each JSON data.parentId
property is used to defines the parent field which builds the relationship between ID and parent field.root
property is used to define the root node for the diagram populated from the data source.DataSourceSettings
.Diagram can be populated based on the user defined JSON data (Local Data) by mapping the relevant data source fields.
To map the user defined JSON data with diagram, configure the fields of dataSourceSettings
. The following code example illustrates how to bind local data with the diagram.
var species = [
{ 'Name': 'Species', 'fillColor': '#3DD94A' },
{ 'Name': 'Plants', 'Category': 'Species' },
{ 'Name': 'Fungi', 'Category': 'Species' },
{ 'Name': 'Lichens', 'Category': 'Species' },
{ 'Name': 'Animals', 'Category': 'Species' },
{ 'Name': 'Mosses', 'Category': 'Plants' },
{ 'Name': 'Ferns', 'Category': 'Plants' },
{ 'Name': 'Gymnosperms', 'Category': 'Plants' },
{ 'Name': 'Dicotyledens', 'Category': 'Plants' },
{ 'Name': 'Monocotyledens', 'Category': 'Plants' },
{ 'Name': 'Invertebrates', 'Category': 'Animals' },
{ 'Name': 'Vertebrates', 'Category': 'Animals' },
{ 'Name': 'Insects', 'Category': 'Invertebrates' },
{ 'Name': 'Molluscs', 'Category': 'Invertebrates' },
{ 'Name': 'Crustaceans', 'Category': 'Invertebrates' },
{ 'Name': 'Others', 'Category': 'Invertebrates' },
{ 'Name': 'Fish', 'Category': 'Vertebrates' },
{ 'Name': 'Amphibians', 'Category': 'Vertebrates' },
{ 'Name': 'Reptiles', 'Category': 'Vertebrates' },
{ 'Name': 'Birds', 'Category': 'Vertebrates' },
{ 'Name': 'Mammals', 'Category': 'Vertebrates' }
];
ej.diagrams.Diagram.Inject(ej.diagrams.DataBinding, ej.diagrams.HierarchicalTree);
//Initializes diagram control
var diagram = new ej.diagrams.Diagram({
width: '100%', height: 490,
//Configures data source
dataSourceSettings: {
id: 'Name', parentId: 'Category', dataManager: new ej.data.DataManager(species),
//binds the external data with node
doBinding: function (nodeModel, data, diagram) {
nodeModel.annotations = [{
content: data.Name, margin: { top: 10, left: 10, right: 10, bottom: 0 },
style: { color: 'black' }
}
];
nodeModel.style = { fill: '#ffeec7', strokeColor: '#f5d897', strokeWidth: 1 };
}
},
//Configrues HierarchicalTree layout
layout: {
type: 'HierarchicalTree', horizontalSpacing: 15, verticalSpacing: 50,
margin: { top: 10, left: 10, right: 10, bottom: 0 },
},
//Sets the default values of nodes
getNodeDefaults: function (obj, diagram) {
obj.shape = { type: 'Basic', shape: 'Rectangle' };
obj.style = { strokeWidth: 1 };
obj.width = 95;
obj.height = 30;
},
//Sets the default values of connectors.
getConnectorDefaults: function (connector, diagram) {
connector.type = 'Orthogonal';
connector.style.strokeColor = '#4d4d4d';
connector.targetDecorator.shape = 'None';
},
//Disables all interactions except zoom/pan
tool: ej.diagrams.DiagramTools.ZoomPan,
snapSettings: { constraints: 0 }
});
diagram.appendTo('#element');
<!DOCTYPE html><html lang="en"><head>
<title>EJ2 Diagram</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Typescript UI Controls">
<meta name="author" content="Syncfusion">
<link href="index.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/20.4.48/ej2-base/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/20.4.48/ej2-buttons/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/20.4.48/ej2-popups/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/20.4.48/ej2-splitbuttons/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/20.4.48/ej2-diagrams/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/20.4.48/ej2-navigations/styles/fabric.css" rel="stylesheet">
<script src="https://cdn.syncfusion.com/ej2/20.4.48/dist/ej2.min.js" type="text/javascript"></script>
</head>
<body>
<div id="container">
<div id="element"></div>
</div>
<script>
var ele = document.getElementById('container');
if(ele) {
ele.style.visibility = "visible";
}
</script>
<script src="index.js" type="text/javascript"></script>
</body></html>
You can bind the diagram with remote data by using [dataManager
].
It uses two different classes: DataManager
for processing and Query
for serving data. DataManager
communicates with data source and Query
generates data queries that are read by the dataManager
.
To learn more about data manager, refer to Data Manager
.
To bind remote data to the diagram,configure the fields of dataSourceSettings
. The following code illustrates how to bind remote data to the diagram.
ej.diagrams.Diagram.Inject(ej.diagrams.DataBinding, ej.diagrams.HierarchicalTree);
//Initializes diagram control
var diagram = new ej.diagrams.Diagram({
width: '100%', height: 490,
//Configrues hierarchical tree layout
layout: {
type: 'HierarchicalTree', margin: { left: 0, right: 0, top: 100, bottom: 0 },
verticalSpacing: 40,
getLayoutInfo: function (node, options) {
if (options.level === 3) {
node.style.fill = '#3c418d';
}
if (options.level === 2) {
node.style.fill = '#108d8d';
options.type = 'Center';
options.orientation = 'Horizontal';
}
if (options.level === 1) {
node.style.fill = '#822b86';
}
}
},
//Sets the default values of nodes
getNodeDefaults: function (obj) {
obj.width = 80;
obj.height = 40;
obj.shape = { type: 'Basic', shape: 'Rectangle' };
obj.style = { fill: '#048785', strokeColor: 'Transparent' };
},
//Sets the default values of connector
getConnectorDefaults: function (connector) {
connector.type = 'Orthogonal';
connector.style.strokeColor = '#048785';
connector.targetDecorator.shape = 'None';
},
//Configures data source
dataSourceSettings: {
id: 'EmployeeID', parentId: 'ReportsTo',
dataManager: new ej.data.DataManager({ url: 'http://mvc.syncfusion.com/Services/Northwnd.svc/', crossDomain: true }, new ej.data.Query().from('Employees').select('EmployeeID,ReportsTo,FirstName').take(9)),
//binds the external data with node
doBinding: function (nodeModel, data, diagram) {
nodeModel.annotations = [{
content: data.FirstName,
style: { color: 'white' }
}];
}
},
//Disables all interactions except zoom/pan
tool: ej.diagrams.DiagramTools.ZoomPan,
snapSettings: { constraints: 0 }
});
diagram.appendTo('#element');
<!DOCTYPE html><html lang="en"><head>
<title>EJ2 Diagram</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Typescript UI Controls">
<meta name="author" content="Syncfusion">
<link href="index.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/20.4.48/ej2-base/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/20.4.48/ej2-buttons/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/20.4.48/ej2-popups/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/20.4.48/ej2-splitbuttons/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/20.4.48/ej2-diagrams/styles/material.css" rel="stylesheet">
<link href="//cdn.syncfusion.com/ej2/20.4.48/ej2-navigations/styles/fabric.css" rel="stylesheet">
<script src="https://cdn.syncfusion.com/ej2/20.4.48/dist/ej2.min.js" type="text/javascript"></script>
</head>
<body>
<div id="container">
<div id="element"></div>
</div>
<script>
var ele = document.getElementById('container');
if(ele) {
ele.style.visibility = "visible";
}
</script>
<script src="index.js" type="text/javascript"></script>
</body></html>
This feature allows you to read the data source and perform add or edit or delete the data in data source at runtime.
dataManager
property. The nodes will be generated based on the data specified in the data source.connectionDataSource
property.dataManager
property is used to set the data source for the connection data source items.crudAction’s
read
property specifies the method, which is used to read the data source and its populate the nodes in the diagram.read
specifies the method, which is used to read the data source and its populates the connectors in the diagram.id
and connectionDataSource’s id
properties are used to define the unique field of each JSON data.sourceID
and targetID
properties are used to set the sourceID and targetID for connection data source item.sourcePointX
, sourcePointY
, targetPointX
, and targetPointY
properties are used to define the sourcePoint and targetPoint values for connector from data source.customFields
property is used to maintain the additional information for nodes.customFields
is used to maintain the additional information for connectors.create
property specifies the method, which is used to get the nodes added from the client-side to the server-side.create
specifies the method, which is used to get the connectors added from the client-side to the server-side.//Initialize diagram
var diagram = new ej.diagrams.Diagram({
dataSourceSettings: {
crudAction:
{
//Url which triggers the server side AddNodes method
create: 'https://ej2services.syncfusion.com/development/web-services/api/Crud/AddNodes',
},
}
connectionDataSource: {
crudAction: {
//Url which triggers the server side AddConnectors method
create: 'https://ej2services.syncfusion.com/development/web-services/api/Crud/AddConnectors',
}
}
},'#diagram');
//Sends the newly added nodes/connectors from client side to the server side through the URL which is specified in server side.
diagram.insertData();
update
property specifies the method, which is used to get the modified nodes from the client-side to the server-side.update
specifies the method, which is used to get the modified connectors from the client-side to the server-side.//Initialize diagram
var diagram = new ej.diagrams.Diagram({
dataSourceSettings: {
crudAction:
{
//Url which triggers the server side UpdateNodes method
update: 'https://ej2services.syncfusion.com/development/web-services/api/Crud/UpdateNodes',
},
}
connectionDataSource: {
crudAction: {
//Url which triggers the server side UpdateConnectors method
update: 'https://ej2services.syncfusion.com/development/web-services/api/Crud/UpdateConnectors',
}
}
},'#diagram');
//Sends the updated nodes/connectors from client side to the server side through the URL which is specified in server side.
diagram.updateData();
destroy
property specifies the method, which is used to get the deleted nodes from the client-side to the server-side.destroy
specifies the method, which is used to get the deleted connectors from the client-side to the server-side.//Initialize diagram
var diagram = new ej.diagrams.Diagram({
dataSourceSettings: {
crudAction:
{
//Url which triggers the server side DeleteNodes method
destroy: 'https://ej2services.syncfusion.com/development/web-services/api/Crud/DeleteNodes',
},
}
connectionDataSource: {
crudAction: {
//Url which triggers the server side DeleteConnectors method
destroy: 'https://ej2services.syncfusion.com/development/web-services/api/Crud/DeleteConnectors',
}
}
},'#diagram');
//Sends the deleted nodes/connectors from client side to the server side through the URL which is specified in server side.
diagram.removeData();