javascript - @Output 和 @HostListener 单击会导致名称相同时超出最大调用堆栈大小
问题描述
当有一个@Output
namedclick
并且有一个@HostListener
监听时click
,是否有可能使它不会发生最大调用堆栈大小超出错误?我想将输出值保留为单击,因为我已经知道我可以重命名输出名称并且它会起作用。
我试过e.stopPropagation()
了,但这只是给我一个错误,说这stopPropagation
不是一个函数。
我有一个看起来像这样的组件。它有一个传入的点击监听器和一个传出的点击发射器:
@Component({
selector: 'my-button',
template: `
<button>{{label}}</button>
`
})
export class Button {
@Input() label = '';
@Input() uri?: string;
@Output('click') onButtonClick = new EventEmitter<string>();
@HostListener('click')
onClick() {
if (this.uri) {
this.onButtonClick.emit(this.uri);
}
}
}
然后我像这样使用它:
<my-button label="Google" uri="http://google.com" (click)="doSomething()"></my-button>
这是一个Stackblitz
解决方案
您可以添加如下条件:
@HostListener("click", ['$event'])
onClick(e) {
if (this.uri && e !== this.uri) {
this.onButtonClick.emit(this.uri);
}
}
它仍然会发出两次,您需要在父组件中处理它。
另一种方法是删除
@Output('click') onButtonClick = new EventEmitter<string>();
并通过event
对象传递数据:
@HostListener("click", ['$event'])
onClick(e) {
if (this.uri) {
e.data = this.uri;
}
}
父.html
(click)="doSomething($event)"
父.ts
doSomething(e) {
console.log(e.data);
}
推荐阅读
- r - Highchart 离线导出
- powerbi - 在 Power BI 中获取数据时在 REST API 调用中指定今天的日期
- mysql - 如何修复“使用任务调度程序运行 mysqldump 后的空文件”
- sql - 将 DATE_TRUNC 周日期设置为星期六而不是星期一
- python - 如何将for循环打印放在引号中?
- npm-scripts - 有没有办法修复'npm ERR!react.js 中的代码 ELIFECYCLE'"
- excel - VBA用户表单检查文件是否存在于所选文件夹中
- blockchain - 区块链中当前状态下的基础加密货币总量是如何计算的?
- css - 如何正确对齐?
- vmware - 在 VMware Vsphere 中启动 VM 的 API 方法?