Mat menu angular

Mat menu angular DEFAULT

Angular Material 7 - Menu

The <mat-menu>, an Angular Directive, is used to create a menu and attach it with a control with material design styling and animation capabilities.

In this chapter, we will showcase the configuration required to draw a menu control using Angular Material.

Create Angular Application

Follow the following steps to update the Angular application we created in Angular 6 - Project Setup chapter −

1Create a project with a name materialApp as explained in the Angular 6 - Project Setup chapter.
2Modify app.module.ts, app.component.ts, app.component.css and app.component.html as explained below. Keep rest of the files unchanged.
3Compile and run the application to verify the result of the implemented logic.

Following is the content of the modified module descriptor app.module.ts.

import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppComponent } from './app.component'; import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; import {MatMenuModule, MatButtonModule} from '@angular/material' import {FormsModule, ReactiveFormsModule} from '@angular/forms'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, BrowserAnimationsModule, MatMenuModule, MatButtonModule, FormsModule, ReactiveFormsModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }

Following is the content of the modified HTML host file app.component.html.

<button mat-button [matMenuTriggerFor] = "menu">File</button> <mat-menu #menu = "matMenu"> <button mat-menu-item>New</button> <button mat-menu-item>Open</button> <button mat-menu-item [matMenuTriggerFor] = "recent">Recent</button> </mat-menu> <mat-menu #recent = "matMenu"> <button mat-menu-item>File 1</button> <button mat-menu-item>File 2</button> </mat-menu>


Verify the result.



  • As first, we've created two menus using mat-menu and bind them to buttons using matMenuTriggerFor.

  • matMenuTriggerFor is passed the menu identifier to attach the menus.


Angular Material Menu: mat Menu example

To implement menu items in Angular we can use angular material menu module called .

selector is used to display floating menu panel containing list of menu items.

Table of Contents

Steps to implement Menu items in Angular applications.

We can import material menu module (MatMenuModule) in our components ts file or app.module.ts file or some common material module which can be used across the application as explained in angular material tutorial.

After importing in our component file, use selector which is nothing but a floating panel containing list of menu options.

I am using element as Menu Item. And do not forgot to add to the menu options.

Add a template reference variable to the which will be used to refer our menu panel.

In this case I have added variable .

The above element does not render anything in the UI.

The menu should be attached to a trigger element, which will open and close the menu using directive

In the above example I am attaching container to a button called “Simple Menu” via attribute.

Use the template reference variable i.e., , created in step 2 to attach the menu panel to the trigger element.

By default material menu will be displayed under the menu trigger element.

To change the menu position we can use and properties of mat-menu selector.

If you want display menu before and after the menu trigger element we can pass xPosition value as “before” or “after”.

xPosition property changes the menu position across the horizontal axis.

To display the menu position above the menu trigger element set yPosition property as “above”.

yPosition property used to change the menu position across the vertical axis.

yPosition accepts the values “above” or “below”.

We can display material icons before the menu item text by placing mat-icon elements.

Further we can use mat icons as menu trigger elements.

Creating nested menus or sub menus is very simple.

We need to attach another menu to using property.

We will create a simple nested menu which represents different types of programming languages which follows the below structure.

  1. languages
    1. frontend
      1. Javascript
        1. jQuery
        2. VueJs
      2. Typescript
      3. Angular
    2. backend
      1. C#
      2. Java

We have three levels of sub menus.

First We will create first level of Menus with root as languages and menu list items as frontend and backend.

Now under frontend menu-list-item, we have three sub menu items as Javascript,typescript and Angular.

Similarly for backend we have two sub menu list items as C# and Java.

Now we will create second level sub menus by creating two new menu items as frontend and backend.

Now we need to attach this second level menus to the above frontend and backend menu list items using .

Now we will create third level sub menu Javascript.

And attach this to second level sub menu list item i.e.,Javascript using .

Now our three level Nested Menu is ready.

To open mat open programmatically we need to get instance of from element.

In the below example element is an icon button.

I have added template variable to that element.

And now in component ts file, I am using to get the instance from the trigger element. i.e., .

MatMenuTrigger will expose several methods including .

For our demo purpose I have created a button and attached a click event method .

Inside method I am calling which will open our menu.

The above menu list items are static.

In most of the real world cases, we might need to create dynamic menus, where the menu list items may come from an API through ajax call or from an observable.

For that purpose I have create a object which will be used to generate dynamic menu list items.

I am assinging mat menu item values in the constructor.

This menu list item data may come from observable as well.

And in component HTML file using we can create menu list items as shown below.

Even if we have static menu items, I prefer creating a menu list object and bind it to mat-menu panel in component HTML file.

Because *ngFor will simplify our HTML code.

To add click events to mat menu item, we can use built in click event method.

In the above example, I have created a method called and bind it to the mat-menu-item click event.

If you are using angular routes in your application we can navigate to that particular route on mat menu click event.

Or we can add another property to the which represents angular route to navigate so that we can avoid the above if loop check.

If your menu item only handles with route navigation then you can directly add attribute to .

To disable the mat menu item we can use disable property.

In the above MatMenuListItem object I have added a property called . And it can be used to disable the menu link

We can render single menu instance with a different set of data, depending upon the data being passed by the trigger element.

To do that we can pass the data to the menu panel via the input.

This is very helpful in some real world cases. For example in twitter we have the ability to manage multiple accounts at a time.

I have two twitter accounts one is personal @arungudelli and @angular_js.

We can manage two accounts using menu placed at the bottom left corner of the webpage.

If we click on the menu item, we will see multiple options as shown in the below image.

The last menu list item Log out displays user name as well i.e.,,which ever account we are using marked with a tick mark.

Depeding upon the selected account these two entries will change.

In the menu panel, used to receive the data from mat-menu trigger element.

We will try to develop above twitter manage accounts menu using input.

We will create few new classes in our component HTML file and use them to pass dynamic data to the mat menu panel.

I have defined 2 objects

  1. Active User
  2. Menu Items

Now we will build our dynamic menu content structure.

property used to pass dynamic content data to the menu panel. In the above case I am passing object.

I have defined a menu content panel with the name , and attached it to the active user name element via .

In the menu content panel using ng-template selector and input we can lazy load the menu panel data until the menu trigger is clicked.

And in the ng-template, Using I am reading the data provided by the input.

I am passing a complex object to input. Which has list of users, other menu items and active user.

If you have a simple object you can directly use keyword to define a new variable and use it in menu content panel.

  1. Greige bathroom
  2. Jacky cheung album
  3. Invacare spare parts
  4. Hypoechoic structure

Position mat-menu on top of the trigger in Angular material

You can "play" with the properties xPosition and yPosition, see MenuPositionX and menuPositionY


Show the menú on top and on the left if there're enougth space.

You can also add class to the mat-menu using classPane

And add in styles.css,e.g. (*)

(*) You need add the class in a .css general to all the aplication, you can not add the class in the component.css also you use ViewEncapsulation.None (this make that all the .css in your component is applied to all the aplication). The reason is that a mat-menu create the menu in a cdk-overlay that not belong to the component

answered Aug 9 '20 at 16:26


33.6k44 gold badges1818 silver badges4343 bronze badges

Mann Bharryaa 2.0 – Official Video - Shershaah - Sidharth – Kiara - B Praak - Jaani

He pulls Olga to him and fucks like an animal male. The hot head of the penis touches her uterus only for a short moment, giving new sensations. "More more!" demands Olya to increase the pace, - "Please do not stop!" This rough fuck turns her on incredibly. "A-ah-ah.

Menu angular mat

And got our contract out of the feed. oh, you are a whore !!!. the owner yelled at me and literally pounced on me and began to beat me. a client ran up to him and began to pull him aside. calm down, dad, she has nothing to do with it.

Angular Material Tutorial - 12 - Menu

Now she felt more relaxed. yes, even more. I got rid of her extra clothes. no, no, just a sweater so far. We drank tea with a chocolate bar, talked and already anticipated imminent sex, not to mention the sex itself.

You will also like:

I waited, I waited, but nothing happened. The only sound in the room was the smacking of my wife, who seemed to have swallowed his cock all the way. Down and was now savoring it deep in her throat.

1600 1601 1602 1603 1604