2016-04-01 12 views
16

Mi chiedo come posso usare @HostListener. L'unica informazione che ho trovato, era in cheatsheet:Come usare HostListener

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

Sto cercando di registrare l'elemento che l'utente ha cliccato. Ho provato così:

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

Ma poi ricevo un errore di:

TypeError: decorator is not a function(…) 

Tutte le idee?

risposta

28

Il messaggio di errore è abbastanza preciso. Un decoratore è solo per decorare una funzione (o una classe, un campo, un parametro, ...) Basta metterlo davanti al codice che si desidera decorare:

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

Grazie! Il mio problema è stato anche che l'ho inserito al di fuori della classe. Qualche idea sul perché 'e' potrebbe essere indefinita? – uksz

+1

L'alternativa "all'esterno" della classe è di aggiungerla al '@Component()' (o '@Directive()' decoratore come '@Component ({..., host: {'(clic)': 'onClick ($ event) '}) 'che fa lo stesso del codice nella mia risposta.In realtà no, se viene chiamato' onClick (e) ',' e' dovrebbe avere un valore.Potete provare se' ['$ event .target '] 'fa qualche differenza? –

+0

Quando ho aggiunto $ event.target, funziona come previsto – uksz