2017-06-13 47 views
2

我主要擔心的是,$event顯示該行錯誤:

starClick($event) { 

參數$事件隱含有 '任意' 類型

我也懷疑 - 根據Angular2文檔,$event所做的是捕獲事件對象,因此讓我問一個愚蠢的問題 - 爲什麼我們不稱它爲$object?因爲它讓我迷惑了不少,直到我終於意識到發生了什麼這裏..

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'在你的案例中有MouseEvent類型,你可以在你的方法中添加這個以避免警告。 – hiper2d

+1

從EventEmitter傳遞'$ event'。如果它是ObjectEmitter,它將是'$ object' - 但事實並非如此。 – estus

回答

9

由於tscon中的下面的標誌,您會收到此錯誤fig.json

「noImplicitAny」:真

你有2種方法來解決這個問題。

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

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

對於(點擊)= 「的onClick($事件)」 應在組件捕獲爲

的onClick(事件:的KeyboardEvent)

(鼠標懸停) ='onMouseOver($ event)'應該被捕獲爲

onMouseOver(event:MouseEvent)

3

我認爲這是一個警告,而不是一個錯誤,你可能看到你的代碼編輯器。你可以簡單地通過把任何像你參數的類型避免這種情況:

starClick($event:any) { ... 

$事件是角慣例,你只應在HTML使用它像:

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

而當你在這樣的打字稿碼願意,你可以將其命名爲:

onYourCustomEventHandle(apples){ ... } 

onYourCustomEventHandle(oranges){ ... } 

只是它的名字,因爲我t對你更有意義。 使用自定義事件時,您使用$事件將數據傳遞到您的處理程序。

當與常規的事件,如使用它:

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

你只是得到事件對象爲在你的代碼的參數,但同樣,你在代碼願意,你可以將其命名爲:

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

但是不要忘了在HTML中總是命名$事件

相關問題