考虑以下组件:
@Component({
selector: 'app-test'
template: 'Hello!'
}}
export class TestComponent {
@Output() readonly selectionChange = new EventEmitter<SomeTypeHere>();
}
与通话:
<app-test (selectedChange)="selectedChangeHandler($event)"></app-test>
注意,我写的是selectedChange
,而不是正确的输出名称selectionChange
。启用了strictTemplates
标志的Angular 9完全没有帮助我。它无声地失败了。有趣的是,如果我对@Input
执行相同的操作,则应用程序会捕获错误并且无法编译。
如果我尝试“侦听”不存在的@Output
,有什么办法引发错误?
没有抛出错误,因为不仅在@Output
和EventEmitter
中使用了Angular中的事件绑定,而且还侦听了click
,keyup
等DOM事件。甚至可以用来收听自定义事件。例如,如果您在子组件中创建并发出自定义事件:
constructor (private el: ElementRef) {}
ngOnInit(): void {
const domEvent = new CustomEvent('selectedChange', { custom: true });
this.el.nativeElement.dispatchEvent(domEvent);
}