tgx:component#
Подключает компонент или шаблон.
Синтаксис#
<tgx tgx:component="header"></tgx>
Пример 1: минимум (копипаст для старта)#
<tgx tgx:component="header"></tgx>
Пример 2: реальный сценарий#
<tgx tgx:component="@global/cookie"></tgx>
Разбор#
Используйте для переиспользуемых блоков: header, footer, shared-компоненты.Когда использовать#
- Когда блок повторяется на разных страницах (header, footer, карточки, FAQ-блоки) и его нужно переиспользовать.
- Когда важно разделить структуру страницы и переиспользуемые части, чтобы править контент быстрее.
Поведение в runtime#
- Тип: пользовательская директива.
- В sandbox директива
tgx:component: разрешена.
Параметры#
Обязательные#
tgx:component— селектор компонента (@global/...,/components/...,#id,.class,@ext:...).
Необязательные#
payload— объект/переменная для передачи в компонент.- Любые дополнительные обычные атрибуты на
<tgx>попадают вpayload.*.
По умолчанию#
- Если компонент не найден/недоступен, runtime рендерит предупреждение.
Типы#
payload: объект, JSON или ссылка на переменную через шаблонное выражение (<< variable >>).
Типы данных и приведение#
- Поддерживаются локальные селекторы шаблона (
#id,.class) и компоненты по имени/пути. - Alias-форматы:
@global/...,@ext:<slug>/...,@conn:<slot>.<key>/.... - Для
@ext:<slug>/...рендер доступен владельцу расширения или при активном подключении расширения. - В sandbox допустим только локальный селектор
#.... - Атрибуты узла (и
payload) передаются в контекст компонента как входные данные.
Частые ошибки#
- Путать форматы селектора:
#.../. ...— это локальный узел,@global/...,@ext:...,@conn:<slot>.<key>/...— это alias-пути компонентов. - Ожидать доступ к
@ext:...без активного подключения расширения или прав владельца.
Проверка перед публикацией#
- Пример рендерится без ошибок в sandbox.
- Значения по умолчанию обработаны (
|fallback) там, где данные могут отсутствовать. - Проверен корректный формат селектора компонента (
#...,@global/...,@ext:...,@conn:<slot>.<key>/...). - Для
@ext:...проверен сценарий доступа: компонент рендерится только при доступном подключении расширения.
См. также#
Передача значений в компонент#
Внутри компонента входные данные доступны вpayload.
<tgx
tgx:component="@global/ui/badge"
payload='{"text":"Новый","tone":"success"}'
count="<< /orders/:count >>"
></tgx>
Внутри компонента:
<span class="badge badge-<< payload.tone|secondary >>">
<< payload.text >> (<< payload.count|0 >>)
</span>
Что передается автоматически:
payload.inner.html— внутренний HTML тега<tgx ...>...</tgx>.payload.inner.text— текстовая версия внутреннего содержимого.payload.component— селектор компонента.- Любые обычные атрибуты тега (
count,label,...) становятсяpayload.<name>.
payload="<< local >>" передает текущий локальный контекст в компонент.
inner и component — зарезервированные ключи payload: их нельзя переопределить через payload=.
Возврат значений из компонента#
Внутри компонента можно заполнитьreturn.* через tgx:set:
<tgx tgx:set="return.result">ok</tgx>
<tgx tgx:set="return.total"><< payload.count|0 >></tgx>
После рендера return не протекает напрямую в родителя:
runtime сохраняет снимок return в local.<component-key>.
component-key формируется из селектора компонента:
убираются служебные префиксы (например @global/), а / заменяется на -.
Для @global/ui/badge ключ будет ui-badge, и в родителе можно читать:
<tgx tgx:component="@global/ui/badge" payload='{"count":3}'></tgx>
<p>Статус: << local.ui-badge.result|нет >></p>
<p>Итого: << local.ui-badge.total|0 >></p>