Ваш input
не обновляется, потому что это 2 разных элемента.
set value(val) {
this.setAttribute('value', val);
}
устанавливает атрибут value
на
<vi-textfield value="[val]">
не атрибут value
в
<input id="vi-input" type="text" value="${this.getAttribute("value")}"/>
, который является другим элементом в ваших элементах shadowDOM
value="${this.getAttribute("value")}"
выполняется один раз , потому что connectedCallback()
работает один раз
Если вы хотите установить оба , вы можете сделать:
set value(val) {
this.setAttribute('value', val);
this.shadowRoot.getElementById("vi-input").setAttribute("value", val);
}
Если вы хотите их в syn c, вам также нужно установить setAttribute код, когда value
на входе изменяется.
PS.
set readonly(val) {
if (val) {
this.setAttribute("readonly", '');
} else {
this.removeAttribute("readonly");
}
}
можно записать как:
set readonly(val) {
this.toggleAttribute("readonly", val);
}