HTML Templates представляют собой способ определения структуры DOM, которая изначально не рендерится на странице, но может быть использована для создания повторяющихся или динамически управляемых элементов. В Polymer шаблоны играют центральную роль в организации компонентов и позволяют отделить разметку от логики.
Ключевой элемент — <template>:
<template>
<p>Пример текста внутри шаблона</p>
</template>
При загрузке страницы содержимое <template> не
отображается. Polymer расширяет возможности стандартного шаблона за
счёт:
dom-if.dom-repeat.Привязка данных позволяет динамически вставлять значения свойств в
разметку. В Polymer используется синтаксис двойных фигурных скобок
{{property}} для двусторонней привязки и одинарных скобок
[[property]] для односторонней.
Пример:
<template>
<p>Привет, {{name}}!</p>
</template>
Если свойство name изменяется в компоненте, Polymer
автоматически обновит DOM, отражая новое значение.
dom-ifdom-if позволяет создавать элементы только при
выполнении определённого условия:
<template is="dom-if" if="[[isVisible]]">
<p>Этот текст появляется только при isVisible = true</p>
</template>
Эффективность заключается в том, что элемент не создаётся в
DOM, если условие false, что экономит ресурсы и
предотвращает ненужные рендеры.
dom-repeatДля отображения массивов данных используется
dom-repeat:
<template is="dom-repeat" items="[[items]]" as="item">
<p>[[item.name]]</p>
</template>
items — массив данных.as — имя переменной для текущего элемента массива.Polymer автоматически обновляет список при изменении массива, добавлении или удалении элементов.
Slots позволяют компоненту Polymer принимать контент извне и вставлять его в определённые места внутри шаблона компонента. Это основной инструмент композиции компонентов.
<my-element>
<p>Текст для вставки</p>
</my-element>
Внутри компонента:
<template>
<slot></slot>
</template>
Контент из внешнего HTML автоматически попадёт на место
<slot>.
Для более сложного распределения контента используются именованные слоты:
<my-element>
<h1 slot="title">Заголовок</h1>
<p slot="content">Основной текст</p>
</my-element>
В шаблоне компонента:
<template>
<header>
<slot name="title"></slot>
</header>
<section>
<slot name="content"></slot>
</section>
</template>
Именованные слоты позволяют создавать гибкие, многослойные компоненты, где разные части контента распределяются в разные места DOM.
Слоты могут иметь контент по умолчанию, который отображается, если внешний контент не передан:
<slot name="content">Текст по умолчанию</slot>
Если элемент с соответствующим slot не передан,
отображается текст “Текст по умолчанию”.
Polymer автоматически следит за изменением содержимого слотов. Добавление или удаление элементов извне моментально обновляет отображение внутри компонента. Это особенно важно для динамических интерфейсов, где содержимое компонентов зависит от пользовательских действий или внешних данных.
Slots работают внутри shadow DOM, создавая чёткое разграничение между внутренней структурой компонента и внешним контентом. Взаимодействие через слоты позволяет:
Комбинирование <template> с
dom-repeat и слотами позволяет строить мощные,
переиспользуемые компоненты. Например, список элементов с заголовками и
динамическим контентом может быть создан следующим образом:
<template is="dom-repeat" items="[[items]]">
<my-item>
<h2 slot="title">[[item.title]]</h2>
<p slot="content">[[item.description]]</p>
</my-item>
</template>
Здесь каждая запись массива items превращается в
отдельный компонент my-item с распределённым контентом
через слоты.
Эти механизмы позволяют создавать модульные, легко поддерживаемые компоненты, полностью разделяя логику, данные и представление, что является ключевым принципом архитектуры Polymer.