Чтобы иметь атрибутную часть наследования, вам нужно определить его как таковой.
При использовании пользовательских элементов простое определение атрибута как наблюдаемого не сделает его унаследованным атрибутом, вам необходимо явно настроить его как таковой.
Пример
customElements.define(
'custom-element',
class CustomElement extends HTMLElement {
static get observedAttributes() {
return ['myboolean'];
}
get myboolean() {
return this.hasAttribute('myboolean');
}
set myboolean(value) {
if (value) this.setAttribute('myboolean', true);
else this.removeAttribute('myboolean');
}
}
);
Как только вы получите такое определение, вы увидите, что все работает, как ожидалось, , как показано в этом кодовом пере .
hyperHTML(document.body)`
<custom-element myboolean=${false}>
Boolean test
</custom-element>
`;
Кроме того, вы можете определить свои пользовательские элементы с помощью HyperHTMLElement booleanAttributes
, чтобы упростить этот шаблон для логических атрибутов.