Спасибо за статью, Кристиан.
Недавно я остановился на похожей архитектуре, основанной на некоторых работах Исаака Манна.
Впервые натолкнулся на идею использования TemplateRefs в качестве реквизита рендеринга в React в своем курсе Egghead Advanced Angular Component Patterns. Стоит проверить, есть ли у вас подписка Egghead.
Проблема, с которой я столкнулся, заключалась в том, что у меня было три списка элементов с очень похожими данными, и вначале все они выглядели в основном одинаково.
Здесь и там было несколько небольших отличий, но мы их обошли с помощью объекта конфигурации. Некоторое время это работало нормально, но, как и в случае с программным обеспечением, элементы начали расходиться.
Я обнаружил, что добавляю больше *ngIf
, чем меня устраивало, и поэтому я начал искать альтернативные способы построения элементов.
К счастью, я смотрел курс Исаака, и, по крайней мере, мне было с чего начать.
Очень просто, архитектура, которая у меня есть сейчас,
<list-container> <ng-template let-item="item"> <list-item [item]="item"></list-item> <ng-template> </list-container>
Тогда внутри list-container
это выглядит примерно так:
<div *ngFor="let item of items"> <ng-template [ngTemplateOutlet]="itemTemplate" [ngTemplateOutletContext]="{ item: item }"> </ng-template> </div>
Компонент контейнера обрабатывает всю работу со списком, такую как разбиение на страницы, сортировка, выбор и т. д., а элемент списка — это то, что вы передаете в качестве выходного элемента шаблона для отображения. Позволяет вам лучше контролировать отображение пользовательского интерфейса, как описано в этой статье.
Я бы хотел, чтобы в сообществе Angular было больше дискуссий об архитектуре компонентов пользовательского интерфейса. Я думаю, что это одна из областей, где сообщество React гораздо более креативно.
Я обнаружил, что когда ваш вариант использования выходит за рамки простой архитектуры компонентов ввода и вывода, обсуждение сразу же переходит к NgRx, который я не заинтересован в представлении.