【发布时间】:2016-06-21 12:16:57
【问题描述】:
我有点困惑$event 到底在做什么,这两个例子有什么区别
<button (click)="clicked($event)"></button>
@Component(...)
class MyComponent {
clicked(event) {
event.preventDefault();
}
}
和
<button (click)="clicked()">Click</button>
@Component(...)
class MyComponent {
clicked(event) {
}
}
【问题讨论】:
-
在底层 Angular 使用了一个名为 $event 的参数,并从字面上复制了你的回调代码
clicked($event),因此 $event 被硬编码为该值。看起来像这样self.parentView.context.clicked($event)。如果您使用自定义名称而不是 $event,例如event123,Angular 将检查 componentInstance.event123 属性并将其作为参数传递 - 这可能是 null/undefined。这与使用 HTML 内联处理程序<input type="button" onclick="clickHandler(event)" >的行为类似,其中只能使用确切的文本event -
@Brian 我们通常不会将
event参数作为属性值的一部分传递,但处理程序确实具有该参数function clickHandler(event){..}(如果需要)。我认为OP应该知道,事件在DOM中是如何工作的,如图here -
@overexchange 您必须从元素的属性
onclick="clickHandler(event)"传递'event' 参数,否则事件将不会传递给JS 文件中的处理程序。 plnkr.co/edit/9oOCztMuaq7rkowdHsGT?p=preview 这与 Angular 在这种情况下的行为密切相关
标签: typescript angular event-handling