2016-04-01 3 views
16

Мне интересно, как я могу использовать @HostListener. Единственная информация, я нашел, был в cheatsheet:Как использовать HostListener

@HostListener('click', ['$event']) onClick(e) {...} 

Я пытаюсь войти элемент, который пользователь нажал на. Я пробовал так:

@HostListener('click')({ 
    onClick(e) { 
     console.log(e) 
    } 
}) 

Но тогда я получаю ошибку:

TypeError: decorator is not a function(…) 

Любые идеи?

ответ

28

Сообщение об ошибке довольно точно. Декоратор предназначен только для украшения функции (или класса, поля, параметра, ...). Просто поставьте его перед кодом, который вы хотите украсить:

@HostListener('click', ['$event']) 
onClick(e) { 
    console.log(e) 
} 
+1

Спасибо! Моя проблема заключалась также в том, что я разместил ее вне класса. Любые идеи о том, почему «e» могут быть неопределенными? – uksz

+1

Альтернативный «внешний» класс должен добавить его в '@Component()' (или '@Directive()' decorator, например '@Component ({..., host: {'(click)': 'onClick ($ event) '}) ', который делает то же самое, что и код в моем ответе. Фактически нет, если вызывается' onClick (e) ',' e' должно иметь значение. Можете ли вы попробовать, если '[' $ event .target '] 'имеет значение? –

+0

Когда я добавил $ event.target, он работает так, как ожидалось. – uksz

Смежные вопросы