首页 > 解决方案 > 事件发射器绑定

问题描述

我正在阅读 O'Reilly 出版的 Shyam Seshadri 的“Angular Up and Running”。在关于输出和事件发射的讨论中,我有点困惑。

组件中的 EventEmitter 被声明、初始化和实现为:

@Output() private toggleFavorite: EventEmitter<Stock>;

constructor() {
 this.toggleFavorite = new EventEmitter<Stock>();
}

onToggleFavorite(event) {
 console.log('We are toggling the favorite state for this stock.', event);
 this.toggleFavorite.emit(this.stock);
}

app.component.html 中的绑定内容如下:

(toggleFavorite)="appToggleFavorite($event)"

但是 app.component.ts 中的方法定义为:

appToggleFavorite(stock: Stock) {
 console.log('Favorite for stock ', stock, ' was triggered.');
}

如果绑定传递了 $event 对象,并且绑定的方法需要一个 Stock 类型,那么为什么会这样呢?

(它确实有效,我已经测试过了。)

我不是在问 $event 对象做什么,我已经知道了。请仔细阅读我上面的问题。我在问:当绑定函数需要一个类型化参数时,为什么绑定到 EventEmitter 对象传递 $event 对象而不是预期类型的​​对象,为什么它似乎工作(参数获取它的值作为打字。)

标签: angularangular-event-emitter

解决方案


从技术上讲,这$event是不必要的并且会造成混乱。

(toggleFavorite)="appToggleFavorite()"

也可以,因为您暗示当您调用 时.emit,您将appToggleFavorite使用给定的任何值类型来调用.emit. 而且 Javascript 是一种无类型语言,因此它可以在运行时工作。


推荐阅读