var DemoApp = angular.module('DemoApp', ['dx']);
DemoApp.controller('DemoController', function DemoController($scope) {
$scope.selectedTreeItem = "";
$scope.logItems = [];
$scope.treeViewOptions = {
items: products,
width: 300,
height: 450,
onInitialized: function(e){
$scope.treeView = e.component;
},
onItemContextMenu: function(e) {
$scope.selectedTreeItem = e.itemData;
const isProduct = e.itemData.price !== undefined;
$scope.contextMenu.option('items[0].visible', !isProduct);
$scope.contextMenu.option('items[1].visible', !isProduct);
$scope.contextMenu.option('items[2].visible', isProduct);
$scope.contextMenu.option('items[3].visible', isProduct);
$scope.contextMenu.option('items[0].disabled', e.node.expanded);
$scope.contextMenu.option('items[1].disabled', !e.node.expanded);
}
};
$scope.contextMenuOptions = {
dataSource: menuItems,
target: '#treeview .dx-treeview-item',
onInitialized: function(e){
$scope.contextMenu = e.component;
},
onItemClick: function(e) {
let logEntry = '';
switch(e.itemData.id) {
case 'expand': {
logEntry = `The '${$scope.selectedTreeItem.text}' group was expanded`;
$scope.treeView.expandItem($scope.selectedTreeItem.id);
break;
}
case 'collapse': {
logEntry = `The '${$scope.selectedTreeItem.text}' group was collapsed`;
$scope.treeView.collapseItem($scope.selectedTreeItem.id);
break;
}
case 'details': {
logEntry = `Details about '${$scope.selectedTreeItem.text}' were displayed`;
break;
}
case 'copy': {
logEntry = `Information about '${$scope.selectedTreeItem.text}' was copied`;
break;
}
}
$scope.logItems.push(logEntry);
}
};
$scope.listOptions = {
width: 400,
height: 300,
showScrollbar: "always",
bindingOptions: {
items: "logItems"
}
};
});
<!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" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>window.jQuery || document.write(decodeURIComponent('%3Cscript src="js/jquery.min.js"%3E%3C/script%3E'))</script>
<link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/20.2.5/css/dx.common.css" />
<link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/20.2.5/css/dx.light.css" />
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.16/angular.min.js"></script>
<script>window.angular || document.write(decodeURIComponent('%3Cscript src="js/angular.min.js"%3E%3C/script%3E'))</script>
<script src="https://cdn3.devexpress.com/jslib/20.2.5/js/dx.all.js"></script>
<script src="data.js"></script>
<link rel="stylesheet" type="text/css" href="styles.css" />
<script src="index.js"></script>
</head>
<body class="dx-viewport">
<div class="demo-container" ng-app="DemoApp" ng-controller="DemoController">
<div class="form">
<div id="treeview" dx-tree-view="treeViewOptions"></div>
<div class="log-container">
<div><i class="icon dx-icon-clock"></i> Operations log:</div>
<div id="log" dx-list="listOptions"></div>
</div>
<div id="contextMenu" dx-context-menu="contextMenuOptions"></div>
</div>
</div>
</body>
</html>
.form {
display: flex;
}
.form>div,
#treeview {
display: inline-block;
vertical-align: top;
}
.log-container {
padding: 20px;
margin-left: 20px;
background-color: rgba(191, 191, 191, 0.15);
font-size: 115%;
font-weight: bold;
position: relative;
height: 100%;
}
.log-container .dx-icon-clock {
position: relative;
top: 1px;
}
#log {
margin-top: 10px;
}
#log .dx-empty-message {
padding-left: 0px;
}
.dx-list-item-content {
padding-left: 0;
}
var menuItems = [
{ id: 'expand', text: 'Expand category' },
{ id: 'collapse', text: 'Collapse category' },
{ id: 'details', text: 'Show product details' },
{ id: 'copy', text: 'Copy product info' }
];
var products = [{
id: "1",
text: "Stores",
expanded: true,
items: [{
id: "1_1",
text: "Super Mart of the West",
expanded: true,
items: [{
id: "1_1_1",
text: "Video Players",
items: [{
id: "1_1_1_1",
text: "HD Video Player",
price: 220,
image: "../../../../images/products/1.png"
}, {
id: "1_1_1_2",
text: "SuperHD Video Player",
image: "../../../../images/products/2.png",
price: 270
}]
}, {
id: "1_1_2",
text: "Televisions",
expanded: true,
items: [{
id: "1_1_2_1",
text: "SuperLCD 42",
image: "../../../../images/products/7.png",
price: 1200
}, {
id: "1_1_2_2",
text: "SuperLED 42",
image: "../../../../images/products/5.png",
price: 1450
}, {
id: "1_1_2_3",
text: "SuperLED 50",
image: "../../../../images/products/4.png",
price: 1600
}, {
id: "1_1_2_4",
text: "SuperLCD 55",
image: "../../../../images/products/6.png",
price: 1350
}, {
id: "1_1_2_5",
text: "SuperLCD 70",
image: "../../../../images/products/9.png",
price: 4000
}]
}, {
id: "1_1_3",
text: "Monitors",
expanded: true,
items: [{
id: "1_1_3_1",
text: "19\"",
expanded: true,
items: [{
id: "1_1_3_1_1",
text: "DesktopLCD 19",
image: "../../../../images/products/10.png",
price: 160
}]
}, {
id: "1_1_3_2",
text: "21\"",
items: [{
id: "1_1_3_2_1",
text: "DesktopLCD 21",
image: "../../../../images/products/12.png",
price: 170
}, {
id: "1_1_3_2_2",
text: "DesktopLED 21",
image: "../../../../images/products/13.png",
price: 175
}]
}]
}, {
id: "1_1_4",
text: "Projectors",
items: [{
id: "1_1_4_1",
text: "Projector Plus",
image: "../../../../images/products/14.png",
price: 550
}, {
id: "1_1_4_2",
text: "Projector PlusHD",
image: "../../../../images/products/15.png",
price: 750
}]
}]
}, {
id: "1_2",
text: "Braeburn",
items: [{
id: "1_2_1",
text: "Video Players",
items: [{
id: "1_2_1_1",
text: "HD Video Player",
image: "../../../../images/products/1.png",
price: 240
}, {
id: "1_2_1_2",
text: "SuperHD Video Player",
image: "../../../../images/products/2.png",
price: 300
}]
}, {
id: "1_2_2",
text: "Televisions",
items: [{
id: "1_2_2_1",
text: "SuperPlasma 50",
image: "../../../../images/products/3.png",
price: 1800
}, {
id: "1_2_2_2",
text: "SuperPlasma 65",
image: "../../../../images/products/8.png",
price: 3500
}]
}, {
id: "1_2_3",
text: "Monitors",
items: [{
id: "1_2_3_1",
text: "19\"",
items: [{
id: "1_2_3_1_1",
text: "DesktopLCD 19",
image: "../../../../images/products/10.png",
price: 170
}]
}, {
id: "1_2_3_2",
text: "21\"",
items: [{
id: "1_2_3_2_1",
text: "DesktopLCD 21",
image: "../../../../images/products/12.png",
price: 180
}, {
id: "1_2_3_2_2",
text: "DesktopLED 21",
image: "../../../../images/products/13.png",
price: 190
}]
}]
}]
}, {
id: "1_3",
text: "E-Mart",
items: [{
id: "1_3_1",
text: "Video Players",
items: [{
id: "1_3_1_1",
text: "HD Video Player",
image: "../../../../images/products/1.png",
price: 220
}, {
id: "1_3_1_2",
text: "SuperHD Video Player",
image: "../../../../images/products/2.png",
price: 275
}]
}, {
id: "1_3_3",
text: "Monitors",
items: [{
id: "1_3_3_1",
text: "19\"",
items: [{
id: "1_3_3_1_1",
text: "DesktopLCD 19",
image: "../../../../images/products/10.png",
price: 165
}]
}, {
id: "1_3_3_2",
text: "21\"",
items: [{
id: "1_3_3_2_1",
text: "DesktopLCD 21",
image: "../../../../images/products/12.png",
price: 175
}]
}]
}]
}, {
id: "1_4",
text: "Walters",
items: [{
id: "1_4_1",
text: "Video Players",
items: [{
id: "1_4_1_1",
text: "HD Video Player",
image: "../../../../images/products/1.png",
price: 210
}, {
id: "1_4_1_2",
text: "SuperHD Video Player",
image: "../../../../images/products/2.png",
price: 250
}]
}, {
id: "1_4_2",
text: "Televisions",
items: [{
id: "1_4_2_1",
text: "SuperLCD 42",
image: "../../../../images/products/7.png",
price: 1100
}, {
id: "1_4_2_2",
text: "SuperLED 42",
image: "../../../../images/products/5.png",
price: 1400
}, {
id: "1_4_2_3",
text: "SuperLED 50",
image: "../../../../images/products/4.png",
price: 1500
}, {
id: "1_4_2_4",
text: "SuperLCD 55",
image: "../../../../images/products/6.png",
price: 1300
}, {
id: "1_4_2_5",
text: "SuperLCD 70",
image: "../../../../images/products/9.png",
price: 4000
}, {
id: "1_4_2_6",
text: "SuperPlasma 50",
image: "../../../../images/products/3.png",
price: 1700
}]
}, {
id: "1_4_3",
text: "Monitors",
items: [{
id: "1_4_3_1",
text: "19\"",
items: [{
id: "1_4_3_1_1",
text: "DesktopLCD 19",
image: "../../../../images/products/10.png",
price: 160
}]
}, {
id: "1_4_3_2",
text: "21\"",
items: [{
id: "1_4_3_2_1",
text: "DesktopLCD 21",
image: "../../../../images/products/12.png",
price: 170
}, {
id: "1_4_3_2_2",
text: "DesktopLED 21",
image: "../../../../images/products/13.png",
price: 180
}]
}]
}, {
id: "1_4_4",
text: "Projectors",
items: [{
id: "1_4_4_1",
text: "Projector Plus",
image: "../../../../images/products/14.png",
price: 550
}, {
id: "1_4_4_2",
text: "Projector PlusHD",
image: "../../../../images/products/15.png",
price: 750
}]
}]
}]
}];