Я совсем не уверен, что лучше всего определить Shadow DOM в connectedCallback()
(если вы не хотите работать с полифилом Shadow DOM. Где вы это прочитали?
В любом случае, если ваш пример с connectedCallback()
, ошибка связана с тем, что attributeChangedCallback()
вызывается раньше connectedCallback()
.
Именно поэтому свойство this.label1
еще не установлено, когда attributeChangeCallback()
Вместо этого проверьте существование свойства:
attributeChangedCallback(name, oldValue, newValue) {
if ( this.label1 )
this.label1.innerText = this.getAttribute('att1');
}
И при визуализации компонента проверьте наличие атрибута:
connectedCallback() {
//...
this.label1 = this._shadowRoot.getElementById('lable1')
if ( this.getAttribute( 'att1' ) )
this.label1.innerText = this.getAttribute( 'att1' )
}
Обновление
Лучший способ прочитать атрибут зависит от того, когда он вам нужен. В вашем случае использования, поскольку он уже находится в разметке, когда он вам нужен в connectedCallback()
, вы можете просто получить его поиспользуя this.getAttribute()
.
Tu назначьте его значение, возможно, вам следует использовать литерал шаблона с переменной вместо элемента <template>
.
let label = this.getAttribute( 'att1' )
this.shadowRoot.innerHTML = `<label>${label}</label>`