Я пытаюсь проверить, какой из прослушивателей событий установить, установив 'ontouchstart' in window ? 'touchend' : 'click'
, а затем я хочу добавить это внутри @HostListener
, но я не могу это сделать, потому что this
является недоступны в разделе document:click
.Как получить доступ к переменной класса внутри обработчика события HostListener
Вы можете как-то добиться этого?
constructor(private _globals: GlobalVariablesService, private _elementRef: ElementRef) {
this.ns = _globals.ns;
this.deviceListener = ('ontouchstart' in window ? 'touchend' : 'click');
}
// How can I add the this.deviceListener instead of click?
@HostListener('document:click', ['$event'])
onOutsideClick(e) {
// If the clicked element is not the component element or any of its children, close the dropdown
if (this._elementRef.nativeElement !== e.target && !this._elementRef.nativeElement.contains(e.target)) {
this.close();
}
}
См., Если это поможет: http://stackoverflow.com/questions/35080387/dynamically-add-event-listener-in-angular-2. В принципе, добавьте его в конструктор. –
@MarkRajcok После ответа на вопрос, который я опубликовал вчера, у меня создалось впечатление, что вы не должны добавлять таких слушателей событий. – Chrillewoodz
С помощью какой переменной вы пытаетесь получить доступ? В чем проблема с доступом к 'deviceListener'? 'this.deviceListener' должен просто работать в' onOutsideClick() {...} ' –