Welcome folks today in this blog post we will be using the ngx-contextmenu
library in angular 14 to create context menu
in html elements using typescript in browser. All the full source code of the application is shown below.
Get Started
In order to get started you need to make a new angular
project using the below command as shown below
ng new sampleproject
cd sampleproject
And after that you need to install the below libraries
using the below command as shown below
npm i ngx-contextmenu
And after that you will see the below directory
structure of the angular app as shown below
And now you need to go to app.module.ts
file and include the module as shown below
app.module.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { FormsModule } from '@angular/forms'; import { ContextMenuModule } from 'ngx-contextmenu'; import { AppComponent } from './app.component'; @NgModule({ imports: [ BrowserModule, FormsModule, ContextMenuModule.forRoot() ], declarations: [ AppComponent ], bootstrap: [ AppComponent ] }) export class AppModule { } |
As you can see we are including the ContextMenuModule
from the ngx-contextmenu
library and adding it inside the imports array as shown above.
And now we need to go to app.component.html
file and copy paste the following code
app.component.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<p> Right click on someone's name: </p> <ul> <li *ngFor="let item of items" [contextMenu]="basicMenu" [contextMenuSubject]="item">{{item?.name}}</li> </ul> <context-menu> <ng-template contextMenuItem (execute)="showMessage('Hi, ' + $event.item.name)"> Say hi! </ng-template> <ng-template contextMenuItem divider="true"></ng-template> <ng-template contextMenuItem let-item (execute)="showMessage($event.item.name + ' said: ' + $event.item.otherProperty)"> Bye, {{item?.name}} </ng-template> <!-- <ng-template contextMenuItem passive="true"> Input something: <input type="text"> </ng-template> --> </context-menu> |
As you can see in the above html
code we are using the ngFor
directive to loop through the list items
and inside it we are adding the context menu
directive and we have the template
of the menu in which we have the two options
in between we also have the divider
of the menu. And also we have binded onclick
event listener to the menu as well. Now we need to define this menu
items and the methods inside the typescript
code as shown below.
And now we need to go to app.component.ts
file and copy paste the following code
app.component.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import { Component, ViewChild } from '@angular/core'; import { ContextMenuComponent } from 'ngx-contextmenu'; @Component({ selector: 'my-app', templateUrl: './app.component.html', styleUrls: [ './app.component.css' ] }) export class AppComponent { name = 'Angular'; public items = [ { name: 'John', otherProperty: 'Foo' }, { name: 'Joe', otherProperty: 'Bar' } ]; @ViewChild(ContextMenuComponent) public basicMenu: ContextMenuComponent; showMessage(message: any) { console.log(message); } } |
As you can see we are importing the ContextMenuComponent
from the ngx-contextmenu
library and then we have declared the array of items
and inside it we have two objects. Each object contains the name
and then otherProperty
values. And then we are defining the showMessage()
method and inside it we are printing the message inside the console.