2016-08-23 90 views
3

在角1中,例如,我們會在元素內部說ng-click="wasClicked()", 但現在我們說(click)="wasClicked()"。爲什麼是這樣?我想到的唯一想法是Angular 2不必爲每個元素事件都有一個屬性,即任何由括號包圍的東西都將被處理,無論是否存在一個有意義的處理程序?爲什麼在Angular 2中是括號中的事件屬性?

回答

2

有各種不同的點決定()事件

  1. ()括號爲event意義,因爲角2取代通過單糖的語法差不多(20)event A1指令。
  2. 您也可以在圓括號內有任何customEvent名稱(myCustomEvent)="myHandler($event)"$event是事件對象)。
  3. 通過在HTML中將()視爲有效的HTML。

旁註

作爲像()括號替換由單個()括號語法糖同樣[]屬性的結合也取代16角指令數A1 20指令。

真棒Misko's Video解釋他爲什麼決定()事件& []爲屬性綁定。

+1

我認爲將3.添加到我的答案中,但實際上並沒有真正相關,因爲'(xxx)=「yyy」'永遠不會添加到DOM,並且只能由Angular內部處理。 –

+1

正確,雖然它的有效性,但它不會添加(事件)到DOM,角度分析器確實爲我們綁定事件背後的場景。 –

2

有很長的討論應該使用什麼語法。最後()被決定。

在Angular2中沒有針對每個受支持事件的特定指令。

(click)="clickHandler($event)" 

註冊clickHandler方法處理程序click事件,其中click可以是任何有效的事件名稱,也是自定義事件。

爲任何元素未發出的事件註冊處理程序也是有效的。正如你在下面看到的,你無法預先知道什麼事件被解僱了。

這增加了很大的靈活性,因爲新事件不需要任何代碼更改或新指令。

例如,你可以調用

element.dispatchEvent(new CustomEvent('my-xxx-event', { bubbles: true })); 

,並聽取使用

(my-xxx-event)="doSomething($event) 

沒有任何額外的工作。

+0

是的,如我懷疑。謝謝。 – ProfK

相關問題