2017-06-13 5 views
2

Mein Hauptanliegen ist, dass $event zeigen Fehler in dieser Zeile:

starClick($event) { 

Parameter $ Ereignis implizit hat 'jeden' Typ

Ich frage mich auch - nach Angular2 Docs, was $event tut ist das Ereignisobjekt erfasst, so lassen Sie mich dumme Frage stellen - warum wir es nicht $object nennen? Weil es mich verwirren ziemlich viel, bis ich endlich, was geschieht hier realisiert ..

import { Component } from '@angular/core'; 

@Component({ 
    moduleId: module.id, 
    selector: 'stars', 
    template: ` 
     <span class="glyphicon glyphicon-star-empty" (click)= "starClick($event)"></span> 
    ` 
}) 

export class StarsComponent { 
    starClick($event) { 
    if($event.target.className == "glyphicon glyphicon-star-empty") { 
     $event.target.className = "glyphicon glyphicon-star"; 
    } 
    else{ 
     $event.target.className = "glyphicon glyphicon-star-empty"; 
    } 
    } 
} 
+0

'$ event' hat in Ihrem Fall MouseEvent-Typ, Sie können dies in Ihrer Methode hinzufügen, um eine Warnung zu vermeiden. – hiper2d

+1

'$ event' wird von EventEmitter übergeben. Es wäre "$ object", wenn es ObjectEmitter wäre - aber das ist es nicht. – estus

Antwort

9
innerhalb des HTML zu nennen

Sie diesen Fehler wegen der unter Flagge in tscon fig.json

"noImplicitAny": true

Sie haben zwei Möglichkeiten, dies zu beheben.

1. "noImplicitAny": false //Make this false 

2. Mention the event type in component code, for eg. 

Für (click) = "onClick ($ event)" sollte in Ihrer Komponente als

onClick (event: Keyboardevent) erfasst werden

und

(Mouseover) = 'onMouseOver ($ event)' sollte als

erfasst werden onMouseOver (Ereignis: MouseEvent)

3

Ich denke, dass dies eine Warnung und kein Fehler, dass Sie wahrscheinlich in Ihrem Code-Editor sehen. Sie können dies einfach vermeiden, indem jede als Typ Ihres Parameter wie wenn man:

starClick($event:any) { ... 

$ event ist eine Konvention von Winkel- und man sollte es nur im HTML verwenden wie:

<input type="text" (yourCustomEvent)="onYourCustomEventHandle($event)"> 

Und man kann es nennen, wie Sie im Typoskript Code wie diesen wollen: nennen es einfach

onYourCustomEventHandle(apples){ ... } 

onYourCustomEventHandle(oranges){ ... } 

als i Das ergibt mehr Sinn für dich. Wenn Sie benutzerdefinierte Ereignisse verwenden, verwenden Sie $ event, um Daten an Ihren Handler zu übergeben.

Bei Verwendung mit den regelmäßigen Veranstaltungen wie:

<button (click)="onClick($event)" (mouseover)='onMouseOver($event)'> 

Sie einfach das Ereignisobjekt als Parameter in Ihrem Code erhalten, aber auch hier kann man es nennen, wie Sie im Code wünschen:

onClick(myClickEvent){ ... } 
onClick(e){ ... } 
onMouseOver(event){ ... } 
onMouseOver(johnny){ ... } 

Aber vergessen Sie nicht, es ist immer $ event