2016-04-01 6 views
16

Zastanawiam się, jak mogę użyć @HostListener. Jedynym informacji znalazłem, był w cheatsheet:Jak używać HostListener

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

Próbuję zalogować element, który użytkownik kliknął. Próbowałem tak:

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

Ale wtedy otrzyma błąd:

TypeError: decorator is not a function(…) 

jakieś pomysły?

Odpowiedz

28

Komunikat o błędzie jest dość dokładny. Dekorator służy tylko do dekoracji funkcji (lub klasy, pola, parametru, ...) Wystarczy umieścić go przed kodem, który chcesz ozdobić:

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

Dzięki! Mój problem polegał na tym, że umieściłem go poza klasą. Wszelkie pomysły na pytanie, dlaczego "e" może być nieokreślone? – uksz

+1

Alternatywą "poza" klasą jest dodanie jej do dekoratora '@Component()' (lub '@Directive()' jak '@Component ({..., host: {'(kliknij)': 'onClick ($ event) '}) ', który robi to samo, co kod w mojej odpowiedzi.Tak właściwie nie, jeśli' onClick (e) 'jest wywoływane,' e' powinno mieć wartość. Czy możesz spróbować, jeśli '[' $ event .target '] 'robi jakąkolwiek różnicę? –

+0

Po dodaniu $ event.target działa zgodnie z oczekiwaniami – uksz