- By itself mat-menu does not render anything
- It has to be triggered from UI element or programatically
- Documentation : https://material.angular.io/components/menu/api
material.module.ts (add a new module)
import { NgModule } from '@angular/core'; import { MatButtonModule } from '@angular/material'; import { MatProgressSpinnerModule} from '@angular/material/progress-spinner'; import { MatBadgeModule } from '@angular/material/badge'; import { MatButtonToggleModule} from '@angular/material/button-toggle'; import { MatIconModule} from '@angular/material/icon'; import { MatToolbarModule} from '@angular/material/toolbar'; import { MatSidenavModule} from '@angular/material/sidenav'; import { MatMenuModule} from '@angular/material/menu'; const MaterialComponent = [ MatButtonModule, MatButtonToggleModule, MatIconModule, MatBadgeModule, MatProgressSpinnerModule, MatToolbarModule, MatSidenavModule, MatMenuModule ]; @NgModule({ imports: [ MaterialComponent, ], exports: [ MaterialComponent ] }) export class MaterialModule { }
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 { MaterialModule } from './material/material.module'; import { FormsModule } from '@angular/forms'; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, BrowserAnimationsModule, MaterialModule, FormsModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }
app.component.html
<mat-menu #appMenu="matMenu" xPosition="after" yPosition="above"> <button mat-menu-item [matMenuTriggerFor]="subMenu">FrontEnd</button> <button mat-menu-item>BackEnd</button> </mat-menu> <button class="center" mat-flat-button [matMenuTriggerFor]="appMenu">Menu</button> <mat-menu #subMenu="matMenu"> <button mat-menu-item>Angular</button> <button mat-menu-item>React</button> <button mat-menu-item>Vue</button> </mat-menu> <mat-menu #lazyMenu="matMenu"> <ng-template matMenuContent let-name="name" let-hobby="hobby"> <button mat-menu-item>Setting</button> <button mat-menu-item>Hobby is {{hobby}}</button> <button mat-menu-item>Logout {{name}}</button> </ng-template> </mat-menu> <button [matMenuTriggerFor]="lazyMenu" [matMenuTriggerData]="{name : 'Tyson', hobby: 'Gaming'}" mat-raised-button> Tyson</button> <button [matMenuTriggerFor]="lazyMenu" [matMenuTriggerData]="{name : 'Heapwizard', hobby: 'Blogging'}" mat-raised-button>HeapWizard</button>
app.component.css
.center{ margin: 10rem; }
app.component.ts
import { Component } from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { opened = false; title = 'GettingStarted'; log(state){ console.log(state); } }
Output :