gpt4 book ai didi

Angular 2 - 使用字符串解析组件工厂

转载 作者:太空狗 更新时间:2023-10-29 18:06:04 26 4
gpt4 key购买 nike

这是针对 Angular 的 2.1.0 最终发布版本。

我正在尝试动态实例化一个类型从配置 JSON 文件传递​​的组件。我能找到的最好的东西是 ComponentFactoryResolver,但是我发现除了一个之外的所有用法似乎都将实际的 Type 对象传递给解析器。

有没有办法从字符串中获取类型?因为目前,将类型作为字符串传递给我错误:

没有找到 MyComponent 的组件工厂

相关代码:

StructureBuilder 组件:

private renderComponent(config:any) {
let configComponents = config.components;
if(config.hasOwnProperty('components') && configComponents.length){
for(let i = 0, len = configComponents.length; i < len; i++){
this.componentResolver.resolveComponentFactory(configComponents[i]);
}
}
}

其中 config.components 是使用 Type 作为值的字符串数组。

并在模块定义中(Structure.module.ts)

@NgModule({
declarations: [
MyComponent,
StructureBuilder_Cmp
],
entryComponents: [
MyComponent
]
//Etc...
});

就稀疏文档而言,这正是您应该做的。

如果我将从 configComponents[i] 传入的动态字符串更改为 MyComponent 的实际导入类型引用,它会起作用。

所以基本上,问题是:有没有办法将 resolveComponentFactory 与字符串一起使用来解析组件,如果没有,是否有办法从字符串值中获取 Type 引用?

最佳答案

我现在的解决方案是做我真正想避免的事情,即维护 key /值注册表。

let componentRegistry = {
'SomeComp1': SomeComp1,
'SomeComp2': SomeComp2
}

然后调用它:

private renderComponent(config:any) {
let configComponents = config.components;
if(config.hasOwnProperty('components') && configComponents.length){
for(let i = 0, len = configComponents.length; i < len; i++){
let comp = configComponents[i];
this.componentResolver.resolveComponentFactory(this.componentRegistry[comp]);
}
}
}

关于Angular 2 - 使用字符串解析组件工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40222579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com