Как стать автором
Обновить

Комментарии 6

НЛО прилетело и опубликовало эту надпись здесь

Статья и так получилась довольно большая, старался, как мог компактно и понятно всё разложить :-) с радостью подробнее расскажу про то, что вызвало вопросы. О чём бы хотелось больше пояснений?

Почему не пойти дальше и перейти к полной динамике?
Директива, которая рендерит шаблоны и компоненты, прокидывает в компоненты formControl(если они CVA) content-child и тд.
И даже есть реализации этих директив @ngxd/core, ng-torque
Можно заморочиться как угодно :) Описанный тут подход, по сути, полагается полностью на механизмы ангуляра и предоставляет необходимую гибкость. Мне его хватает, но посмотрю на предложенные реализации, спасибо!
Подскажите, немного не понял, чем не подходит для реализации всего выше перечисленного ng-content?
По массе причин:
1) ng-content не имеет контекста, не получится передать в компонент меню в контент какое-то содержимое и размножить его на каждый пункт, передавая пункт как контекст.
2) У компонента может быть больше одной кастомизируемой «ячейки» — у того же меню это пункты меню и шаблон для отображения «Ничего не найдено». На практике таких мест часто 2-3.
3) Не всегда кастомизация задаётся через шаблон, например содержимое для модального окна у нас тоже передаётся в виде такого гибкого контента — можно определить шаблон внутри компонента, вызывающего попап, можно сделать отдельный компонент попапа для переиспользования (например, просто запрос на Да/Нет от пользователя). Вызовы бывают из сервисов, где шаблонов вообще нет.
4) Частный пример — компонент отображения ошибки. У нас он получает словарь для отображения типовых ошибок через DI. Встроенный валидатор Angular на максимальную длину создаёт ошибку вида `maxlength: { requiredLength: 12 }` — для отображения таких ошибок достаточно просто использовать функцию вида:
(context: {requiredLength}) => `Превышена максимальная длина — ${context.requiredLength}`;
А наши собственные валидаторы могут возвращать шаблоны или компоненты для стилизации сообщений, добавления к ним ссылок, подсказок и т.д.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий