私の親コンポーネントには、btnと設定メニューの指示があります。私がしようとしているのは、elementref#navBtnをsettings-menuへの入力として渡すことです。nativeElementが定義されていないのはなぜですか?
<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;
私はイベントターゲットは/除外にoffclickにHostListenerで、この要素を含むかどうかを確認することができますので、私はこのelementrefを必要としています。
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はthis.btn上nativeElementもngAfterViewInitライフサイクルフックで、常に定義されていないので、それは、そうですBTNのhtmlとないelementRefを返します。