В качестве дополнения к предыдущему ответу, чтобы лучше сравнить два метода, возможно, стоит добавить несколько подробностей о том, что происходит в каждом случае.
Шаги, чтобы «создать» компонент с помощью FactoryResolver service:
- создает экземпляр класса компонента с помощью метода
resolveComponentFactory()
: этот метод принимает в качестве параметра тип компонента и ищетсоответствующая «фабрика компонентов».
Примечание: фабрики компонентов - это классы, созданные Angular для каждого объявленного компонента с целью создания новых компонентов - «добавление» нового компонента кпросмотр с использованием метода
createComponent()
класса ViewContainerRef
Для информации: https://angular.io/guide/dynamic-component-loader#resolving-components
Шаги, применяемые при структурной директиве (ngIf
, ngSwitch
...) 'создает' компонент:
- директива создает встроенное представление с предоставленным шаблоном.Для этого он также использует класс
ViewContainerRef
(метод createEmbeddedView()
). - В случае, когда это представление содержит селектор компонента, Angular создает новый класс компонента, также используя соответствующую фабрику, которая будетбыть добавлен к представлению.
=> оба метода проходят примерно одинаковые шаги (фактически метод «структурная директива» добавляет дополнительный шаг, создание встроенногопредставление, которое, я думаю, ничтожно мало).
Поэтому, на мой взгляд, наиболее ценной причиной для выбора одного из двух вариантов является вариант использования , который я бы суммировалследующим образом:
Структурная директива (ngIf
, ngSwitch
...):
- полезно, когда имеется несколько компонентов
Служба FactoryResolver: