【发布时间】:2018-06-03 04:01:42
【问题描述】:
在我的父组件中,我有一个 btn 和一个设置菜单指令。我想要做的是将 elementref #navBtn 作为输入传递给设置菜单。
<div #navBtn (click)="toggleNav()" class="header__button header__button--left" id="header_button--left">
<img class="align-absolute" src="assets/imgs/icon_sandwich.svg">
</div>
<settings-menu [btn]="navBtn" [navOpened]="navOpened" (navClosed)="navOpened.next(false)"></settings-menu>
...
@ViewChild('navBtn') navBtn: ElementRef;
我需要这个 elementref,这样我就可以检查事件目标是否在 Offclick 的 HostListener 中包含/排除这个元素。
private _btn: ElementRef;
@Input('navOpened') navOpened: BehaviorSubject<boolean>;
@Input('btn')
set btn(val: ElementRef) {
this._btn = val;
}
get btn() {
return this._btn;
}
@HostListener('document:click', ['$event']) offClick(e: Event) {
e.stopPropagation();
console.log('el', this.el.nativeElement, 'btn', this.btn.nativeElement, 'target', e.target);
if (!this.el.nativeElement.contains(e.target) || this.btn.nativeElement.contains(e.target)) this.closeNav();
}
但是 this.btn 返回 btn html 而不是 elementRef 似乎,因为 this.btn 上的 nativeElement 始终未定义,即使在 ngAfterViewInit 生命周期挂钩中也是如此。
【问题讨论】:
标签: javascript angular typescript