angular - 使用 MatMenuTrigger 上的 ViewChild 以编程方式打开 Angular 材质菜单
问题描述
如何使用按钮触发器上的模板引用变量以编程方式打开 Angular Material 菜单,该变量在组件中使用 ViewChild 访问?
菜单通常在单击时打开,但我想在鼠标悬停时以编程方式打开它。
(鼠标悬停)事件处理程序给出错误:无法读取未定义的属性“openMenu”。
那么为什么组件中没有定义 clickHoverMenuTrigger 呢?
这是组件html
<button mat-icon-button [matMenuTriggerFor]="clickHoverMenu"
#clickHoverMenuTrigger (mouseover)="openOnMouseOver()">
<mat-icon>notifications</mat-icon>
</button>
这是组件打字稿
@ViewChild(MatMenuTrigger) clickHoverMenuTrigger: MatMenuTrigger;
openOnMouseOver() {
this.clickHoverMenuTrigger.openMenu();
}
此方法记录在此处https://material.angular.io/components/menu/overview
在这里提出并回答了同样的问题如何从打字稿访问 mat 菜单触发器(我没有对此发表评论的声誉)
看起来我正在按照文档和上面的 StackOverflow 解决方案中的说明进行操作。
由于 clickHoverMenuTrigger 未定义,这一定是@ViewChild 的问题。
Stackblitz上的代码。打开控制台查看错误。
解决方案
只需更改@ViewChild
为
@ViewChild('clickHoverMenuTrigger') clickHoverMenuTrigger: MatMenuTrigger;
整体代码应该是:
<h1>2 buttons, 2 Menus</h1>
<ol>
<li>Standard Material Button opens menu on click </li>
<li>Same, but with event handler to open menu on mouseover</li>
</ol>
<button mat-icon-button [matMenuTriggerFor]="clickMenu"
#clickMenuTrigger="matMenuTrigger">
<mat-icon>touch_app</mat-icon>
</button>
<button mat-icon-button [matMenuTriggerFor]="clickHoverMenu"
#clickHoverMenuTrigger="matMenuTrigger" (mouseover)="openOnMouseOver()">
<mat-icon>notifications</mat-icon>
</button>
<mat-menu #clickMenu="matMenu">
<button mat-menu-item>Settings</button>
<button mat-menu-item>Help</button>
</mat-menu>
<mat-menu #clickHoverMenu="matMenu">
<button mat-menu-item>New items</button>
</mat-menu>
ts:
export class AppComponent {
@ViewChild('clickHoverMenuTrigger') clickHoverMenuTrigger: MatMenuTrigger;
openOnMouseOver() {
this.clickHoverMenuTrigger.openMenu();
}
}
推荐阅读
- sql - SQL Netezza 中的 SYS_CALENDAR 函数
- laravel - 如何滚动到livewire laravel中的第一个验证错误消息
- python - 如何使用列名作为 x 值在 pandas 中绘制时间序列?
- javascript - React 功能组件不会根据自己的状态更改重新渲染
- android - Api 请求不适用于带有 EXPO 的 Android
- stormcrawler - 如何防止我们的服务器公司出现问题
- docusignapi - 使用 DocuSign Connect 信封级 webhook 包括自定义字段
- hadoop - 我想用 Java 写一个 Hadoop MapReduce Join
- python - Python,我无法从另一个脚本元素更改列表元素
- javascript - 使用javascript从多个对象中提取数据