Полагаю, причина в том, что Angular создает эти настраиваемые встроенные элементы при разборе шаблонов компонентов - вероятно, он не знает, как это правильно сделать.Скорее всего, он считает is
обычным атрибутом, который можно добавить после создания элемента (а это не так).
Сначала создайте элемент, а затем добавьте is
-attribute, к сожалению, не обновит элемент.
См. пример ниже: div#d
имеет нерабочий пример этого настроенного input
.
customElements.define('my-input', class extends HTMLInputElement {
connectedCallback() {
this.value = this.parentNode.id
this.parentNode.classList.add('connected')
}
}, {
extends: 'input'
})
document.addEventListener('DOMContentLoaded', () => {
b.innerHTML = `<input type="text" is="my-input">`
let el = document.createElement('input', {
is: 'my-input'
})
el.type = 'text'
c.appendChild(el)
// will not work:
let el2 = document.createElement('input')
el2.setAttribute('is', 'my-input')
el2.type = 'text'
d.appendChild(el2)
})
div {
border: 3px dotted #999;
padding: 10px;
}
div::before {
content: "#"attr(id)" ";
}
.connected {
background-color: lime;
}
<div id="a"><input type="text" is="my-input"></div>
<div id="b"></div>
<div id="c"></div>
<div id="d"></div>
Чтобы заставить его работать с Angular, подключитесь к жизненному циклу вашего компонента Angular (например, обратный вызов onInit()
) и выберите рабочий путь.создать там свой элемент.