html - 扩展另一个自定义元素的自定义 HTML 元素
问题描述
我有一个自定义 HTML 标签<fancy-foo>
,我想扩展它的功能。一些<fancy-foo>
元素将使用pretty-bar
自定义元素进行扩展,以便我可以在我的 HTML 中将它们用作
<fancy-foo is="pretty-bar">
<!-- content -->
</fancy-foo>
所以,我定义类FancyFoo
和PrettyBar
,定义fancy-foo
元素并使用 扩展它pretty-bar
,如下所示:
class FancyFoo extends HTMLElement {
constructor() {
super();
}
}
class PrettyBar extends FancyFoo {
constructor() {
super();
}
}
window.customElements.define('fancy-foo', FancyFoo);
window.customElements.define('pretty-bar', PrettyBar, {extends: 'fancy-foo'});
可悲的是,谷歌浏览器吐出了错误
未捕获的 DOMException:无法在“CustomElementRegistry”上执行“定义”:“fancy-foo”是有效的自定义元素名称
这是一个奇怪的错误。奇怪的是,它说“fancy-foo”是一个有效的自定义元素名称;我知道,但为什么会抛出错误?
这里发生了什么?
解决方案
您不能以这种方式扩展自定义元素(使用{extends: '...'}
)。您只能扩展内置(= 标准)HTML 元素。
如果要设计PrettyBar
为 的扩展FancyFoo
,则需要将其定义为自主自定义元素:
class PrettyBar extends FancyFoo {...}
window.customElements.define('pretty-bar', PrettyBar)
HTML 标记也是如此:
<pretty-bar></pretty-bar>
推荐阅读
- gradle - Gradle 不会发布工件?
- amazon-web-services - 如何在不验证收件人电子邮件 ID 的情况下使用 AWS SES 发送邮件?
- python - 将 A 列数据框 A 中的值匹配到数据框 B 中的 B 列,并使用 pandas 从数据框 A 创建无匹配项列表
- html - 为什么我的社交媒体图标没有显示在页脚中?
- azure-devops - Azure Pipelines/VSTS:删除外部工件预删除项目保留策略的构建
- r - 在 R 中,如何过滤数据框以仅包含 >=2 非 NA 值的行?
- spring-boot - Spring Batch Multiple JobExecutionListener - 不工作
- javascript - 如何在不使用 document.write() 的情况下在 Javascript 中开始新行?
- sql - 使用“with”函数和中位数有困难
- python - 索引ndarray时应该如何使用arange函数?