我想创建一个角度为7(前端)的Web应用程序,以动态加载不同类型的组件,例如本例 https://angular.io/guide/dynamic-component-loader
但是我不确定使用template <class Archive, class T, typename std::enable_if<std::is_base_of<Artifact,T>::value>::type* = nullptr>
void serialize(Archive &ar, std::shared_ptr<T>& artifact, unsigned int version) { ... }
是否是个好主意。
我从没用过,也不知道它是否稳定以及性能如何。
如果有人知道替代方案,我希望您对此发表意见。
我不想使用ComponentFactoryResolver
谢谢!
答案 0 :(得分:4)
是的,最好使用ComponentFactoryResolver
,这就是正式文档中的原因。自Angular 2起,它就位于内部,非常稳定。对性能没有重大影响。
许多Angular库在内部也使用Angular Material library。 检查Portal inside the Component Development Kit (CDK)及其source in GitHub,您可以在其中看到它用于在其中显示动态内容。
关于您的问题,最好是使用NgSwitch
还是使用ComponetFactoryResolver
来创建组件,这很难回答,因为这取决于您要尝试执行的操作,而您并未解释确切的含义场景。我要说的是,在大多数情况下,您应该使用ComponentFactoryResolver
,因为它允许您动态添加任何组件,并且对于所有可能的动态组件,您都没有一个带有巨大NgSwitch
的大组件。仅在您的动态组件数量很少且您不希望添加新组件的情况下,使用NgSwitch
创建它们可能会更容易。
答案 1 :(得分:2)
作为先前答案的补充,为了更好地比较这两种方法,可能需要添加每种情况下发生的情况的一些详细信息。
使用 FactoryResolver 服务“创建”组件的步骤:
resolveComponentFactory()
实例化组件类
方法:此方法将组件类型作为参数,并且
寻找相应的“组件工厂”。createComponent()
将新组件“附加”到视图
ViewContainerRef
类的方法有关信息: https://angular.io/guide/dynamic-component-loader#resolving-components
结构指令 (ngIf
,ngSwitch
...)“创建”组件时应用的步骤:
ViewContainerRef
类(
createEmbeddedView()
方法。=>这两种方法大致都经过相同的步骤(实际上,“结构指令”方法增加了一个步骤,即创建嵌入式视图,我认为这是可以忽略的)。
因此,我认为,从两个选项中选择一个的最有价值的原因是用例,我将总结如下:
结构指令(ngIf
,ngSwitch
...):
FactoryResolver服务: