Angular 5中如何从组件实例获取Angular Type<>实例?
解决方法
要从组件实例获取Angular所需的Type实例,直接取该实例的constructor属性即可,这就是组件对应的类(也就是Angular的Type类型)。
具体代码实现
// 假设component是已有的组件实例 const componentType = component.constructor; // 用Type实例解析组件工厂 const componentFactory = componentFactoryResolver.resolveComponentFactory(componentType); // 创建新组件实例 const newComponentRef = viewContainerRef.createComponent(componentFactory);
错误原因说明
你之前直接传入组件实例给resolveComponentFactory会报错,是因为这个方法要求的参数是组件的类(Type),而不是组件的实例对象,所以Angular无法识别传入的实例,才会提示找不到组件工厂。
额外注意事项
- 虽然你已经有组件实例,但Angular 5中动态创建组件时,该组件必须在所属
@NgModule的entryComponents数组中注册,否则依然会报错(这一步是动态组件创建的必要条件)。 - 如果遇到
constructor属性无法正确获取的极端情况(比如代码压缩或装饰器影响),可以改用Object.getPrototypeOf(component).constructor来获取组件类。
内容的提问来源于stack exchange,提问作者Christian Vincenzo Traina
相关产品推荐
相关产品推荐

