Your search did not match any results.
Tree View

ContextMenu Integration

To display a DevExtreme ContextMenu when users right-click TreeView nodes, specify the nodes as the menu's target elements. To do this, set the menu's target option to a CSS selector. Since all TreeView nodes use the dx-treeview-item class, you can use this class' selector, as shown in this demo.

You can control each command's enabled state depending on the node where users invoked the context menu. Implement the TreeView's onItemContextMenu function; in it, set the disabled option to true for required commands.

Copy to CodePen
Apply
Reset
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.3/css/dx.common.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/20.2.3/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.3/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>&nbsp;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 }] }] }] }];