У меня есть пользовательский компонент, который просто показывает карту Таро. Перед настраиваемым элементом я определил шаблон.
В подключенном вызове обратного вызова моего wc я прикрепил сам шаблон к теневому корню, а затем удалил его, клонировав его туда же, в теневой корень. Я сделал это по 2 причинам:
- Я хочу, чтобы мой компонент wc был автономным модулем; поэтому я хочу определить свой шаблон в том же месте, что и мой пользовательский элемент.
Кажется, это единственный способ отпечатать мой шаблон, чтобы его можно было использовать, не вставляя его в документ владельца.
var tmpl = ` <template id="tmpl"> <h1 class="tarot-title"><slot name="title">NEED TITLE</slot> </h1> <img src="${this.imageurl}" alt=""> <p><slot name="subtitle">NEED A SUBTITLE</slot></p> </template>`; class BdTarot extends HTMLElement { ...constructor etc... connectedCallback() { this._shadowRoot.innerHTML = tmpl; var _tmpl = this._shadowRoot.querySelector('#tmpl'); this._shadowRoot.appendChild(_tmpl.content.cloneNode(true)); } } customElements.define('bd-tarot', BdTarot);
Проблема, которую это создало, заключается в том, что каждый компонент карты Таро, который я использую на своей странице, имеет один и тот же шаблон, являющийся дочерним, все с одним и тем же идентификатором. Так как они в Shadowroot, это имеет значение? Зато смешно пахнет...
Моя цель — просто попытаться понять, как все спецификации веб-компонентов сочетаются друг с другом. Мой вопрос в том, есть ли лучший способ сделать это, чтобы сохранить мой код компонента вместе и не ссылаться на документ владельца? Является ли спецификация шаблона в основном несовместимой с пользовательскими элементами, поскольку импорт html не поддерживается большинством поставщиков браузеров?