【发布时间】:2020-05-11 02:21:16
【问题描述】:
我正在尝试动态调用组件。我有一个将子组件类型作为输入(字符串)的组件。例如 detail.itemType = '手风琴'。我希望这个组件根据类型调用正确的子组件,但不使用 if 语句
import { ContentDetail, ContentFields } from 'app/models/content/content.model';
import { Component, OnInit, Input, ComponentFactoryResolver, ViewChild, ViewContainerRef, ComponentRef } from '@angular/core';
import { AccordionComponent } from './accordion-paragraph/accordion-paragraph.component';
@Component({
selector: 'app-content-components',
templateUrl: './content-components.component.html',
styleUrls: ['./content-components.component.scss']
})
export class ContentComponentsComponent implements OnInit {
constructor(private componentFactoryResolver: ComponentFactoryResolver) { }
@ViewChild('createComponent', {static: true, read: ViewContainerRef }) entry: ViewContainerRef;
@Input() public detail: ContentDetail = new ContentDetail();
ngOnInit() {
let component: any = null;
if(this.detail.itemType === 'Accordion'){
component = AccordionComponent;
let factory = this.componentFactoryResolver.resolveComponentFactory(component);
let componentRef:ComponentRef<any> = this.entry.createComponent(factory);
}
}
}
所以我想动态添加 Accordion 而不是使用 if 语句。类似:
let componentName = Accordion
component = componentName + Component;
let factory = this.componentFactoryResolver.resolveComponentFactory(component);
let componentRef:ComponentRef<any> = this.entry.createComponent(factory);
是否可以添加这样的组件名称?
【问题讨论】:
-
创建将键映射到组件的字典
-
我能举个例子吗
标签: angular typescript