Тег шаблона не является обязательным для веб-компонентов как таковых.Вероятно, это имело больше смысла, когда HTML Imports выдвигался, позволяя импортировать и повторно использовать фрагменты HTML, но с тех пор это прекратилось.Здесь вы могли бы импортировать шаблон и использовать его повторно.
Важно отметить, что спецификации разработаны как автономные и могут использоваться независимо друг от друга, что делает их универсальными.HTML-тег имеет варианты использования за пределами области веб-компонентов;это полезно, потому что позволяет вам определить фрагмент разметки, который не будет отображаться до тех пор, пока не будет создан экземпляр с помощью JavaScript позже.Действительно, вы можете использовать шаблоны без использования каких-либо других спецификаций (Custom Elements, Shadow DOM и т. Д.).
Тег шаблона, безусловно, может использоваться в сочетании с другими спецификациями.Например, мы могли бы использовать его в показанном примере, чтобы сделать код менее императивным и более сфокусированным на разметку, например:
<template id="counterTemplate">
<style>
:host {
position: relative;
font-family: sans-serif;
}
#counter-increment, #counter-decrement {
width: 60px;
height: 30px;
margin: 20px;
background: none;
border: 1px solid black;
}
#counter-value {
font-weight: bold;
}
</style>
<h3>Counter</h3>
<slot name='counter-content'>Button</slot>
<button id='counter-increment'> - </button>
<span id='counter-value'> 0 </span>
<button id='counter-decrement'> + </button>
</template>
, а затем использовать это позже в JavaScript, например:
const template = document.querySelector('#counterTemplate');
const counter = document.cloneNode(template);
shadowRoot.appendChild(counter);
Недостатком здесь является то, что для этого потребуется, чтобы шаблон существовал в DOM до создания экземпляра, так как он полагается на наличие шаблона #counterTemplate.В некотором смысле это делает пользовательский элемент менее переносимым, поэтому литерал шаблона может быть более желательным.Я не проверял производительность обоих, но моя интуиция говорит мне, что шаблон, возможно, будет более производительным.
Отказ от ответственности : я написал оригинальное сообщение в блоге