angular - 事件发射器绑定
问题描述
我正在阅读 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 对象而不是预期类型的对象,为什么它似乎工作(参数获取它的值作为打字。)
解决方案
从技术上讲,这$event
是不必要的并且会造成混乱。
(toggleFavorite)="appToggleFavorite()"
也可以,因为您暗示当您调用 时.emit
,您将appToggleFavorite
使用给定的任何值类型来调用.emit
. 而且 Javascript 是一种无类型语言,因此它可以在运行时工作。
推荐阅读
- gekko - Gekko 长期性能
- javascript - 如何将一组日期范围分组为具有最小时间间隔的较小组?
- c# - 将命令行参数传递给 C# .NET 应用程序而不使用 UWP 应用程序内的清单文件
- matlab - MATLAB - 从结构中获取单个字段名称
- ios - iOS中的Firebase注册错误通过本机反应
- google-sheets-api - 如何获得有效期超过 24 小时的令牌
- powershell - 在 powershell 中复制脚本时遇到问题
- azure-devops - 将图形文件上传到 devops 以在 markdown 中使用
- c# - 使用身份服务器 4 使用有效的访问令牌获取 401 Unauthorized
- r - 在 R 中的 log10 scale_y_continuous 中设置 ylim