Update
Обновленная версия здесь
Angular 2 как задать template динамически?
Вы можете попробовать сделать директиву-обертку, которая будет динамически подгружать компонент с шаблоном из вашего html.
html-outlet.tsimport {
Component,
Directive,
Input,
ComponentFactory,
ComponentMetadata,
ComponentResolver,
ReflectiveInjector,
ViewContainerRef
} from '@angular/core';
function createComponentFactory(resolver: ComponentResolver,
metadata: ComponentMetadata): Promise<ComponentFactory<any>> {
const cmp = class DynamicComponent { };
const decoratedCmp = Component(metadata)(cmp);
return resolver.resolveComponent(decoratedCmp);
}
@Directive({
selector: 'html-outlet'
})
export class HtmlOutlet {
@Input() html: string;
constructor(private vcRef: ViewContainerRef, private resolver: ComponentResolver) {}
ngOnChanges() {
if (!this.html) return;
const metadata = new ComponentMetadata({
selector: 'dynamic-html',
template: this.html,
});
createComponentFactory(this.resolver, metadata)
.then(factory => {
const inj = ReflectiveInjector.fromResolvedProviders([], this.vcRef.parentInjector);
this.vcRef.createComponent(factory, 0, inj, []);
});
}
}
И потом в нужном месте используете эту директиву:
<html-outlet [html]="html"></html-outlet>
Полный пример можете посмотреть на
plunkr