У вас очень правильный вопрос.Если что-то может быть достигнуто простым if
или switch
случаем, почему мы должны использовать *ngTemplateOutlet
?
Независимый компонент
Вы получаете эти мысли, потому что вы думаете об одном независимомКомпонентный уровень.Другими словами, все условия, шаблоны находятся в одном компоненте.Мы можем легко выбрать шаблон на основе определенного условия.
Компонент библиотеки
Динамический шаблон
Когда я говорю Компонент библиотеки, это означает универсальныйкомпонент многократного использования, например Autocompleter
или Typeahead
и т. д. Эти компоненты предоставляют функциональную часть, однако они позволяют разработчику самостоятельно выбирать template
в соответствии со своими потребностями.
Здесь есть подвох, эти шаблоны не находятся в Autocompleter
, а взяты из его @ContentChild
.
ex:
<ng-autocompleter>
<ng-template #item let-item>{{item.name}}</ng-template>
<ng-autocompleter>
In вышеНапример, <ng-template>
определяется разработчиком в более поздний момент времени, и не является прямой частью <ng-autocompleter>
.
Контекст шаблона
Контекст шаблона очень важен всякий раз, когдаСильно настроенный компонент разработан.Получение динамического шаблона (html) недостаточно для достижения цели.Нам нужно привязать значение к ng-template
.Поскольку ng-template не является частью ng-autocompleter
, нам нужно передать контекст, который содержит все необходимые данные для связывания.
ex: В приведенном выше случае, если вы видите, мы объявили переменную item
с помощью let-item
но откуда взято item
.Это будет определяться контекстом, заданным для *ngTemplateOutlet
.
Заключение в одну строку Если мы хотим внедрить шаблоны, которые будут объявлены кем-то в будущем, я не могу обработать этот случай с помощью * ngIfили * ngSwitch.Нам нужно использовать *ngTemplateOutlet
.