2016-08-23 70 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

相关问题