Я довольно новичок в веб-компонентах и пытаюсь понять, как все это работает. Выполняя рекомендуемый процесс создания шаблона, затем клонируя его в мои shadowRoot
, я вижу их в моих chrome элементах, но не на самой веб-странице.
Например:
import './components/ingredients/ingredients-table';
const template = document.createElement('template');
template.innerHTML = `
<h3>Add some ingredients</h3>
<ingredients-table id="hehe"></ingredients-table>
`
class App extends HTMLElement {
constructor() {
super();
this._shadowRoot = this.attachShadow({ mode: 'open' });
this._shadowRoot.appendChild(template.content.cloneNode(true));
}
connectedCallback() {
console.log(this._shadowRoot.querySelector('ingredients-table').id)
this._shadowRoot.querySelector('ingredients-table').ingredients = [
"1 tbsp, cinnamon extract",
"2 tbsp, cinnamon extract",
"3 tbsp, cinnamon extract",
"4 tbsp, cinnamon extract",
"5 tbsp, cinnamon extract",
"6 tbsp, cinnamon extract",
];
}
}
window.customElements.define('main-app', App);
window.addEventListener('load', () => {
const main = document.querySelector('main');
const app = document.createElement('main-app');
main.appendChild(app);
});
Это показывает это , что, в свою очередь, означает, что функция set <ingredients-table>
не работает
Но когда я изменяю строку конструктора this._shadowRoot.appendChild(template.content.cloneNode(true));
на
this._shadowRoot.innerHTML = `
<h3>Add some ingredients</h3>
<ingredients-table id="hehe"></ingredients-table>
`
Я получаю это
Может кто-нибудь объяснить, как именно это работает? Спасибо
Вот кодекс: https://codepen.io/aishmitkhurana/pen/wvaKWBL?editors=0010