- Notifications
You must be signed in to change notification settings - Fork6.8k
Open
Description
Feature Description
feat(COMPONENT): Programmatically open/close menu
When the menu is clicked, it opens right away.
I want to handle the click event and programmatically open the menu after doing another operation.
My workaround at present:
<buttonmatButton(click)="listData(dataMenu, $event)"#dataMenuBtn>List Data</button><mat-menu#dataMenu> @for (item of data; track item) {<buttonmat-menu-item>{{ item.text }}</button> }</mat-menu>
@ViewChild('dataMenuBtn',{read:ViewContainerRef})privatereadonlydataMenuBtnViewContainerRef!:ViewContainerRef;@ViewChild('dataMenuBtn',{read:ElementRef})privatereadonlydataMenuBtnElementRef!:ElementRef;privatedataMenuTrigger!:MatMenuTrigger;protecteddata:{ text:string}[]=[];protectedasynclistData(dataMenu:MatMenu,$event:MouseEvent):Promise<void>{constmenuTrigger=this.dataMenuTrigger??(this.dataMenuTrigger=runInInjectionContext(Injector.create({providers:[{provide:ElementRef,useValue:this.dataMenuBtnElementRef},{provide:ViewContainerRef,useValue:this.dataMenuBtnViewContainerRef}],parent:this.injector// `Injector` via DI.}),()=>newMatMenuTrigger()));menuTrigger.menu=dataMenu;constresult=awaitfetch(`/api/...`);this.data=awaitresult.json()astypeofthis.data;menuTrigger.openMenu();}
Use Case
Load data inside menu on click