我的应用程序将从包含嵌入的外部api接收html,我想在渲染周围的html时将其转换为组件。 Angular版本4.2.6。
@Component({
selector: 'content-body',
styleUrls: [ './content-body.component.scss' ],
template: `<div [innerHTML]="content"></div>`
})
export class ContentBodyComponent implements OnInit, AfterViewInit {
@Input()
content: string = '<p>Example string</p><p>Should render with [some-embed-to-translate data="passable-data" ]';
constructor(private viewContainerRef: ViewContainerRef,
private componentFactoryResolver: ComponentFactoryResolver){}
ngOnInit() {
// Methods for converting embeds into ng-content containers/reference points that
// can be referenced and transformed into components after init
}
ngAfterViewInit() {
this.loadEmbeds();
}
loadEmbeds() {
// Use viewContainerRef to find the location of the embed
}
}
我最初的想法是将[embeds]转换为带有id的ng-content标签,然后在afterviewinit中创建动态组件时引用索引位置。 我知道innerHTML没有绑定/处理组件所以我正在寻找一种方法来动态创建一个viewChild,一种引用嵌入的索引传递给viewContainerRef.createComponent的方法,或者我可以渲染的其他一些替代方法动态html内容和流程嵌入到组件中。
解决方案
在ngOnInit中:
ngAfterViewInit: