#javascript #html #ecmascript-6 #custom-element
#javascript #HTML #ecmascript-6 #пользовательский элемент
Вопрос:
Я реализовал модальный как пользовательский HTML-тег.
class ModalDialog extends HTMLElement {
constructor() {
super();
this.shadow = this.attachShadow({
mode: 'open'
});
this.modal = document.createElement('div');
this.modal.className = 'modal';
this.modalWrapper = document.createElement('div');
this.modalWrapper.className = 'modal-wrapper';
this.modalHeader = document.createElement('div');
this.modalHeader.className = 'modal-header';
this.modalHeader.innerHTML = 'Oops, nothing found!';
...
}
Кроме того, я реализовал другой класс, который наследуется от HTMLElement. Давайте назовем это A. Указанный класс пытается создать ModalDialog и должен добавить его в DOM, чтобы он отображался.
Теперь мой вопрос: как я могу установить текст modalHeader из класса A? Я попытался установить атрибут и прочитать его в классе ModalDialog, но в то время атрибут не определен.
class A extends HTMLElement {
...
this.modal.setAttribute('headerText', 'Blablabla');
...
}
Есть ли хороший способ решить эту проблему?
Ответ №1:
Ваш класс A должен иметь возможность просто получать доступ к внутренним элементам и устанавливать их innerHTML
или textContent
следующим образом:
class A extends HTMLElement {
...
this.modal.innerHTML = 'Blablabla';
...
}
Кроме того, убедитесь, что вы размещаете this.modal
в shadowRoot
:
this.shadowRoot.appendChild(this.modal);
Еще одна вещь, о которой следует знать, это то, что вам не нужно сохранять результаты this.attachShadow
:
this.shadow = this.attachShadow({mode: 'open'});
Поскольку это уже доступно как this.shadowRoot
.