Моя команда и я в настоящее время создаем библиотеку компонентов, используя Angular (v8.x). Мы хотим установить sh некоторые правила ведения домашнего хозяйства и сделать наши интерфейсы компонентов интуитивно понятными (ie. Согласованное именование входов и использование шаблонов).
Мы нашли между собой две школы мысли об использовании @ Входные и вложенные компоненты.
Наше делема может быть описано с использованием следующих (разбавленных) примеров
Пример компонента 1:
<our-component [hideChild]="childHidden"></our-component>
Пример компонента 2:
<our-component>
<our-child-component></our-child-component>
</our-component>
В примере 1 компонент имеет @Input, который показывает и скрывает дочерний компонент, жестко запрограммированный в шаблоне.
В примере 2 , компонент добавляется (или нет) как дочерний (через ngContent).
Я пытаюсь найти диссертацию, которая диктует, когда использовать один шаблон поверх другого. Я понимаю, что не может быть один. В настоящее время я думаю, что если ваш компонент имеет n чисел или n типов дочерних элементов, используйте вложенность компонентов. Если компонент когда-либо будет иметь только один дочерний тип, используйте входные данные и включите ваш дочерний компонент в шаблон родительских компонентов.
Я проверил руководство по стилю angular, но ничего не могу найти укажите c на эту проблему.
Кто-нибудь знает о каких-либо ресурсах или имел опыт проведения этого различия? Я хотел бы услышать, как и почему вы реализовали это так или иначе.
Редактировать: В частности, я хотел бы окончания следующих утверждений:
" Использовать @Inputs над вложенными компонентами, когда ... " и " Использовать вложенные компоненты над @Inputs, когда ... "
Редактировать 2: Оценить я не могу выражая себя правильно. Вместе с нашей библиотекой компонентов мы упаковываем существующие angular компоненты материала, такие как mat-input
. У нас есть компонент, который оборачивает компоненты mat-form-field, mat-hint и mat-input в наш шаблон. Наш компонент выглядит следующим образом:
<our-input
[hideAssistiveText]="hideAssistiveText"
[type]="inputType"
[hint]="hint"
[label]="label"
[control]="control"
... and so on
></our-input>
Существуют варианты использования для этого компонента, в которых мы не хотим показывать подсказку. Таким образом, до тех пор, пока вы предоставите строку подсказки, our-input
будет показывать компонент our-hint
(который вложен в шаблон).
Но я мог бы с тем же успехом реализовать компонент, чтобы он работал следующим образом:
<our-input
[hideAssistiveText]="hideAssistiveText"
[type]="inputType"
[label]="label"
[control]="control"
... and so on
>
<our-hint label="{{hint}}"></our-hint>
</our-input>
И разработчик мог бы просто пропустить компонент our-hint
, чтобы добиться того же.
Что мне нужно, так это какие-то четкие ресурсы о передовой практике, когда нужно использовать один метод над другим (если есть), или причины, по которым вы выбрали этот метод.