Using functions defined within web component(使用Web组件中定义的函数)
问题描述
我构建了我的Web组件DataUint
,并为其分配了一个标记<data-uint>
,如下所示:
class DataUint extends HTMLElement
{
...
set value(x) { ... }
...
}
customElements.define("data-uint", DataUint);
创建和访问这样的组件时:
x = document.createElement('data-uint');
x.value = 10;
对value
的调用实际上调用了setter方法并执行其函数。
但是,当我在html代码中内置组件时:
<body>
<data-uint id='num'></data-uint>
</body>
并尝试这样访问/使用它:
x = body.children[0];
x.value = 10;
对value
的调用为x引用的元素设置了一个新属性,但从不调用Web组件的setter方法。
然而,x
引用了页面上的正确元素(我的组件),我通过调用其他标准元素方法进行了验证。此访问方法似乎正在返回忽略专门化的泛型Element
。
问题:
我想我在这里遗漏了一些基本概念。如何通过允许我使用其成员函数的方式从JavaScript访问html定义的组件?
推荐答案
您可能正在定义组件之前执行x = body.children[0]; x.value = 10;
。还要注意的是,除非您在代码运行之前声明了一个局部变量body
,否则body
将是undefined
,您的意思可能是使用const x = document.body.children[0];
。
添加此行代码:
const x = document.body.children[0];
console.log(x.constructor.name);
x.value = 10;
如果得到HTMLElement
,则说明您的组件当时尚未定义。如果尚未定义,则没有要执行的setter。
若要检查,您还可以执行console.log(x.matches(':defined'));
。
若要解决此问题,请将代码包装在DOMContentLoaded
侦听器中,或者等待组件定义完成:
customElements
.whenDefined('data-uint')
.then((promise) => {
const x = document.body.children[0];
console.log(x.constructor.name);
x.value = 10;
});
这篇关于使用Web组件中定义的函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:使用Web组件中定义的函数


- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- Flexslider 箭头未正确显示 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01