【发布时间】:2021-05-20 18:23:15
【问题描述】:
示例Stencil.js 网络组件:
import { Component, ComponentInterface, Event, EventEmitter, h, Host } from "@stencil/core";
@Component({
tag: 'foo-testwebcomponent'
})
export class TestWebComponent implements ComponentInterface {
@Event({
eventName: 'foo-click',
cancelable: true
}) fooClick: EventEmitter;
fooClickHandler() {
this.fooClick.emit();
}
render() {
return(
<Host>
<a href="#"
onClick={this.fooClickHandler.bind(this)}
>Testing</a>
</Host>
)
}
}
HTML:
<foo-testwebcomponent id="test"></foo-testwebcomponent>
<script>
document.addEventListener('DOMContentLoaded', () => {
document.getElementById('test')
.addEventListener('foo-click', event => {
event.preventDefault();
console.log(`Foo Test Web Component clicked!`);
});
});
</script>
问题:
在 HTML 实现中,prevent 默认值不会阻止链接工作。
问题:
如何让我的 Web 组件的最终用户阻止默认设置并阻止链接工作?
我知道我可以在fooClickHandler() 中添加preventDefault()(见下文),但这对我来说似乎很奇怪。我想将控制权交给 Web 组件的最终用户。
@Event({
eventName: 'foo-click',
cancelable: true
}) fooClick: EventEmitter<MouseEvent>;
fooClickHandler(event: MouseEvent) {
event.preventDefault();
this.fooClick.emit();
}
【问题讨论】: