How to populate menu items with data source in Angular Context Menu
14 Aug 20264 minutes to read
The ContextMenu component supports data binding through the items property, allowing you to populate menu items dynamically from local data sources. This approach is particularly useful when menu content needs to be generated from arrays, objects, or other structured data formats, providing flexibility for dynamic menu scenarios.
The following example demonstrates how to bind local data source to the ContextMenu:
import { NgModule } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser'
import { ContextMenuModule } from '@syncfusion/ej2-angular-navigations'
import { ButtonModule } from '@syncfusion/ej2-angular-buttons'
import { enableRipple } from '@syncfusion/ej2-base'
import { Component } from '@angular/core';
import { MenuEventArgs, MenuItemModel } from '@syncfusion/ej2-navigations';
import { Record, data } from './datasource';
@Component({
imports: [
ContextMenuModule,
ButtonModule
],
standalone: true,
selector: 'app-root',
template: `<div class="e-section-control">
<!--target element-->
<div id="target">Right click / Touch hold to open the ContextMenu</div>
<!-- To Render ContextMenu. -->
<ejs-contextmenu id='contextmenu' target='#target' [items]= 'items'
(beforeItemRender)='itemRender($event)'></ejs-contextmenu>
</div>`
})
export class AppComponent {
public items: MenuItemModel[] = this.Items();
public Items() {
let record: Record;
let menuItems: any[] = [];
for (let i = 0; i < data.length; i++) {
record = data[i] as Record;
if (record.parentId) {
if (!menuItems[record.parentId - 1].items) {
menuItems[record.parentId - 1].items = []
}
menuItems[record.parentId - 1].items.push({ text: record.text });
} else {
menuItems.push({ text: record.text });
}
}
return menuItems;
}
public itemRender(args: MenuEventArgs ) {
if (!args.item.text) {
args.element.classList.add('e-separator');
}
}
}import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));