set content(val) {
console.log('setter being executed, val being: ', val);
// pass null to represent empty square
if (val !== null) {
this.button.setAttribute('content', val);
} else {
if (this.button.hasAttribute('content')) {
this.button.removeAttribute('content');
}
}
}
Вы смешиваете родителей и детей
Вы определяете сеттер для вашего элемента (► родительский элемент)
Когда вы делаете this.button.setAttribute('content', val);
Вы меняете атрибут вашего элемента ( ► элемент ребенка)
Это никогда вызовет attributeChangedCallback
из (►parent)
, потому что его атрибуты не изменены
Вам необходимо go "поднять DOM" с помощью .getRootNode () и / или .host для установки атрибутов из родительских элементов.
или использования пользовательских событий (всплывание DOM) для уведомить родителей о том, что дети что-то сделали / изменили
Полагаю, вы хотели это сделать
set content(val) {
// loose ==null comparison for null AND undefined,
// element.content=null; will remove the attribute
if (val==null)
this.removeAttribute('content');
else
// but you DO want .content(0) (0==false) set as "0"
this.setAttribute('content', val);
}