Customize menu using events in Angular Menu component

12 Sep 20257 minutes to read

This section demonstrates how to customize the behavior of the Angular Menu component using events such as beforeOpen, beforeClose, onOpen, onClose, select, and created. These events allow dynamic modification of menu behavior, such as altering submenu content or handling item selection.

The following table summarizes the available events and their purposes:

Event Event Argument Purpose
beforeOpen BeforeOpenCloseMenuEventArgs Triggered before a submenu opens, allowing modification of content (cancelable with args.cancel = true).
beforeClose BeforeOpenCloseMenuEventArgs Triggered before a submenu closes, allowing cancellation with args.cancel = true.
onOpen OpenCloseMenuEventArgs Triggered after a submenu opens, useful for post-open adjustments.
onClose OpenCloseMenuEventArgs Triggered after a submenu closes, useful for cleanup tasks.
select MenuEventArgs Triggered when a menu item is selected, enabling custom navigation or actions.
created Event Triggered after the Menu is initialized, useful for setup tasks.

This example renders a menu with custom event handling for item selection.

import { NgModule } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser'
import { MenuModule } from '@syncfusion/ej2-angular-navigations'
import { ButtonModule } from '@syncfusion/ej2-angular-buttons'



import { Component } from '@angular/core';
import { enableRipple } from '@syncfusion/ej2-base';
import { MenuItemModel, OpenCloseMenuEventArgs, BeforeOpenCloseMenuEventArgs, MenuEventArgs } from '@syncfusion/ej2-angular-navigations';

enableRipple(true);

@Component({
imports: [ MenuModule, ButtonModule],


standalone: true,
selector: 'app-root',
template: `<div class="e-section-control">
        <div class="control-section">
    <div class="menu-section">
        <ejs-menu id='menu' [items]='menuItems' (beforeOpen)='beforeOpen($event)' (beforeClose)='beforeClose($event)' (onClose)='onClose($event)' (onOpen)='onOpen($event)' (select)='select($event)' (created)='onCreated()'></ejs-menu>
    </div>
    <div class="property-section">
        <table id="propertyTable" title="Event trace">
            <tbody>
                <th>Event trace:-</th>
                <tr>
                <td [innerHTML]="eventTrace"></td>
                </tr>
            </tbody>
        </table>
    </div>
    <button id='clear' ejs-button cssClass='e-small' (click)='btnClick()'>Clear</button>
    </div>
    </div>`
})

export class AppComponent {
    public eventTrace: string = '';
    public menuItems: MenuItemModel[] = [
        {
            text: 'Events',
            items: [
                { text: 'Conferences' },
                { text: 'Music' },
                { text: 'Workshops' }
            ]
        },
        {
            text: 'Movies',
            items: [
                { text: 'Now Showing' },
                { text: 'Coming Soon' }
            ]
        },
        {
            text: 'Directory',
            items: [
                { text: 'Media Gallery' },
                { text: 'Newsletters' }
            ]
        },
        {
            text: 'Queries',
            items: [
                { text: 'Our Policy' },
                { text: 'Site Map' }
            ]
        },
        { text: 'Services' }
    ];

    public beforeOpen(args: BeforeOpenCloseMenuEventArgs): void {
        this.updateEventLog(args);
    }

    public beforeClose(args: BeforeOpenCloseMenuEventArgs): void {
        this.updateEventLog(args);
    }

    public onClose(args: OpenCloseMenuEventArgs): void {
        this.updateEventLog(args);
    }

    public onOpen(args: OpenCloseMenuEventArgs): void {
        this.updateEventLog(args);
    }

    public select(args: MenuEventArgs): void {
        this.updateEventLog(args);
    }

    public onCreated(): void {
        this.updateEventLog({ name: 'Created' });
    }

    public updateEventLog(args: any): void {
        this.eventTrace = this.eventTrace + args.name + ' Event triggered. <br />'
    }

    public btnClick(): void {
        this.eventTrace = '';
    }
}
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import 'zone.js';
bootstrapApplication(AppComponent).catch((err) => console.error(err));