首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MatMenu的角度访问elementRef

MatMenu的角度访问elementRef
EN

Stack Overflow用户
提问于 2021-07-22 22:30:40
回答 1查看 127关注 0票数 3

我有以下设置:

代码语言:javascript
复制
@Directive({
    selector: '[test]'
})
export class Test {
    constructor(
        private hostRef: ElementRef,
        private host: MatMenuTrigger,
    ) {}

    ngOnInit() {
        this.host.menuOpened.subscribe(() => {
            /* Do something with the MatMenu elementRef */
        });
    }
}
代码语言:javascript
复制
<a [matMenuTriggerFor]="aMenu" test></a>
<mat-menu #aMenu></mat-menu>

我想要获取MatMenu的ElementRef (不是对打开的MatMenu组件的引用,也不是MatMenuTrigger的elementRef )。在查看了MatMenu类的typescript定义文件后,我发现了_elementRef私有属性,它允许我像这样访问elementRef:

代码语言:javascript
复制
this.host.menuOpened.subscribe(() => {
    const ref = (this.host.menu as any)._elementRef;
    /* Do something with ref */
});

唯一的问题是,这依赖于Angular团队在未来的版本中维护这个属性(以及,好吧,这是一个私有属性的事实)。

有没有办法在不使用私有属性的情况下访问MatMenu的ElementRef (或者有办法在不访问相关MatMenuTrigger的情况下关闭MatMenu )?

我需要ElementRef来测试document上的点击是否来自菜单(通过测试菜单elementRef是否包含在event composedPath中)

EN

回答 1

Stack Overflow用户

发布于 2021-07-22 23:46:45

这听起来像是在尝试将对mat-menu元素的引用传递给test指令。如果是这种情况,请尝试向指令添加Input()

代码语言:javascript
复制
@Input() menu: MatMenu;

然后在您的模板中:

代码语言:javascript
复制
<a [matMenuTriggerFor]="aMenu" test [menuRef]="aMenu"></a>
<mat-menu #aMenu></mat-menu>

这样,您就可以通过本地引用将组件传递给您的指令。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68486676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档